📄 simpframe.java
字号:
package com.sea0108.simpmethod;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class SimpFrame extends JFrame
{
public static final boolean MAX_OBJ=true;
public static final boolean MIN_OBJ=false;
public static final Font FONT=new Font("Dialog",Font.PLAIN,12);
public static final Color COLOR=new Color(253,180,180);
public static final Color COLOR2 = new Color(254,228,228);
private JTextField[] textFields=new JTextField[2];
public JTextArea textArea=new JTextArea();
private SimpPanel panel;
private final int panelNum=6;
public JPanel[] panels=new JPanel[panelNum];
public JButton[] buttons=new JButton[]
{
new JButton("确定"),
new JButton("重设"),
new JButton("输入完毕(刷新数据)"),
new JButton("隐藏输入面板"),
new JButton("上一次迭代"),
new JButton("下一次迭代"),
new JButton("显示整个迭代过程"),
new JButton("清除文本域内容")
};
private boolean isHidden=false;
public SimpFrame()
{
init();
this.setTitle("用分支定界法解线性混合整数规划问题");
this.setSize(670,500);
this.setLocation(200,100);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.textFields[0].setHorizontalAlignment(JTextField.CENTER);
this.textFields[1].setHorizontalAlignment(JTextField.CENTER);
buttons[0].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
for(int i =1;i<4;i++)
buttons[i].setEnabled(true);
setPanel();
}
});
buttons[1].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
reset();
}
});
buttons[3].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
panel.setVisible(isHidden);
isHidden=!isHidden;
if(isHidden)
buttons[3].setText("显示输入面板");
else
buttons[3].setText("隐藏输入面板");
}
});
buttons[7].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
textArea.setText("");
buttons[7].setEnabled(false);
}
});
}
private void init()
{
for(int i =1;i<buttons.length;i++)
buttons[i].setEnabled(false);
JScrollPane scrollPane=new JScrollPane(textArea);
JLabel[] labels=new JLabel[]
{
new JLabel("●变量个数"),
new JLabel("●约束条件个数")
};
for(int i=0;i<panelNum;i++)
panels[i]=new MPanel(5,10,10,10);
panels[5]=new MPanel(5,50,20,50);
for(int i=0;i<textFields.length;i++)
textFields[i]=new JTextField("2",4);
for(int i=0;i<buttons.length;i++)
{
buttons[i].setFont(FONT);
buttons[i].setPreferredSize(new Dimension((int)buttons[i].getPreferredSize().getWidth(),22));
}
for(int i=0;i<labels.length;i++)
labels[i].setFont(FONT);
this.getContentPane().add(panels[0]);
panels[0].setLayout(new BorderLayout());
panels[0].add(panels[1],"North");
panels[0].add(panels[2],"Center");
panels[0].add(panels[3],"South");
panels[1].add(labels[0]);
panels[1].add(textFields[0]);
panels[1].add(labels[1]);
panels[1].add(textFields[1]);
panels[1].add(buttons[0]);
panels[1].add(buttons[1]);
panels[1].add(buttons[2]);
panels[2].setLayout(new BorderLayout());
panels[2].add(panels[4],"North");
panels[2].add(panels[5]);
for(int i =3;i<buttons.length;i++)
panels[3].add(buttons[i]);
panels[4].setBackground(COLOR);
panels[5].setLayout(new BorderLayout());
panels[5].setBackground(COLOR);
panels[5].add(scrollPane);
this.textArea.setBackground(COLOR2);
}
private void setPanel()
{
try
{
if(panel!=null)
panels[4].remove(panel);
int[] rowcol=getRowCol();
if(rowcol[0]*rowcol[1]>0)
{
panel=new SimpPanel(rowcol[0],rowcol[1]);
panels[4].add(panel);
}
else
{
error();
}
}
catch(Exception ex)
{
error();
}
refresh();
}
private void error()
{
JDialog dlg=new MDialog(this,"错误提示","非法的输入");
dlg.setVisible(true);
}
private void refresh()
{
this.panels[4].updateUI();
}
private void reset()
{
panels[4].remove(panel);
textFields[0].setText("2");
textFields[1].setText("2");
textArea.setText("");
panels[5].setVisible(false);
for(int i =1;i<buttons.length;i++)
buttons[i].setEnabled(false);
refresh();
}
public int[] getRowCol()
{
String[] s=new String[]{textFields[0].getText(),textFields[1].getText()};
return new int[]{Integer.parseInt(s[1]),Integer.parseInt(s[0])};
}
public String[][] getMatrixA()
{
final int row=panel.textFieldsA.length;
final int col=panel.textFieldsA[0].length;
String[][] matrixA=new String[row][col];
for(int i=0;i<row;i++)
matrixA[i]=getTextFiledsText(panel.textFieldsA[i]);
return matrixA;
}
public String[] getVectorB()
{
return getTextFiledsText(panel.textFieldsB);
}
public String[] getVectorObj()
{
return getTextFiledsText(panel.textFieldsObj);
}
public boolean[] getIsInteger()
{
final int len = panel.checkBoxs.length;
boolean[] isInteger = new boolean[len];
for(int i = 0; i<len; i++)
isInteger[i] = panel.checkBoxs[i].isSelected();
return isInteger;
}
private String[] getTextFiledsText(JTextField[] txtfd)
{
final int len=txtfd.length;
String[] vector=new String[len];
for(int i=0;i<len;i++)
vector[i]=txtfd[i].getText();
return vector;
}
public boolean getObjType()
{
if(panel.comboBoxObj.getSelectedIndex()==0)
return MAX_OBJ;
else
return MIN_OBJ;
}
/**
* the value being returned:int[] the elements denote the types of the equations as following
* -1 for <= or <
* 0 for =
* 1 for >= or >
*/
public int[] getInequationsType()
{
final int len=panel.comboBoxs.length;
int[] ineqs=new int[len];
for(int i=0;i<len;i++)
if(panel.comboBoxs[i].getSelectedIndex()==0)
ineqs[i]=0;
else if(panel.comboBoxs[i].getSelectedIndex()==1)
ineqs[i]=-1;
else
ineqs[i]=1;
return ineqs;
}
}
class MPanel extends JPanel
{
private int a,b,c,d;
public MPanel(int a ,int b,int c,int d)
{
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
public Insets insets()
{
return new Insets(a,b,c,d);
}
}
class MDialog extends JDialog
{
String msg;
public MDialog(JFrame frame,String title,String msg)
{
super(frame,true);
this.setTitle(title);
this.msg=" "+msg;
init();
}
private void init()
{
this.setSize(170,110);
this.setLocation(420,280);
this.setResizable(false);
JLabel lbl=new JLabel(msg);
lbl.setFont(SimpFrame.FONT);
this.add(lbl);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -