⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simpframe.java

📁 [数学问题]用分支定界发解线性混合整数规划问题
💻 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 + -