zoukankan      html  css  js  c++  java
  • java layout 表格项增加、删除、修改

    实现的内容为:点击表格某项,再点击删除钮,可实现删除点击表格某项,再点击编辑按钮,可实现内容改变点击添加按钮,可实现向表格中添加内容
    总结:总的来说中间遇到了很多困难,但是都一步步的解决了。
    package com.platformda.optimize;
    
    import java.awt.BorderLayout;
    import java.awt.Button;
    import java.awt.GridLayout;
    import java.awt.Label;
    import java.awt.Point;
    import java.awt.TextField;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.util.List;
    
    import javax.swing.Box;
    import javax.swing.BoxLayout;
    import javax.swing.DefaultListModel;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTabbedPane;
    import javax.swing.JTable;
    import javax.swing.ListSelectionModel;
    import javax.swing.table.DefaultTableModel;
    import com.platformda.optimize.algorithm.BFGSSetting;
    import com.platformda.optimize.algorithm.BFGSSettingEditor;
    import com.platformda.optimize.algorithm.CGSetting;
    import com.platformda.optimize.algorithm.CGSettingEditor;
    import com.platformda.optimize.algorithm.DFPSetting;
    import com.platformda.optimize.algorithm.DFPSettingEditor;
    import com.platformda.optimize.algorithm.DifferentialEvolutionSetting;
    import com.platformda.optimize.algorithm.DifferentialEvolutionSettingEditor;
    import com.platformda.optimize.algorithm.LMSetting;
    import com.platformda.optimize.algorithm.LMSettingEditor;
    import com.platformda.optimize.algorithm.NewSDSetting;
    import com.platformda.optimize.algorithm.NewSDSettingEditor;
    import com.platformda.optimize.algorithm.NewTRSetting;
    import com.platformda.optimize.algorithm.NewTRSettingEditor;
    import com.platformda.optimize.algorithm.PSOSetting;
    import com.platformda.optimize.algorithm.PSOSettingEditor;
    import com.platformda.optimize.algorithm.PatternSearchSetting;
    import com.platformda.optimize.algorithm.PatternSearchSettingEditor;
    import com.platformda.optimize.algorithm.SimplexSetting;
    import com.platformda.optimize.algorithm.SimplexSettingEditor;
    import com.platformda.optimize.algorithm.TRSetting;
    import com.platformda.optimize.algorithm.TRSettingEditor;
    
    
    public class OptmanagerPanel {
    	 OptmanagerPanel mOptmanagerPanel ;
    	 
    	 JButton addButton = new JButton();
    	 JButton delButton = new JButton();
    	 JButton editButton = new JButton();
    	 
    	 ImageIcon addIcon = new ImageIcon();
    	 ImageIcon delIcon = new ImageIcon();
    	 ImageIcon editIcon = new ImageIcon();
    	 
    	 Button editOkButton     = new Button("   Ok   ");
    	 Button editCancleButton = new Button("Cancle");
    	 Button addOkButton =  new Button("   Ok   ");
    	 Button addCancleButton = new Button("Cancle");
    	 JPanel okandCancleJPanel = new JPanel();
    
    	 
    	 String[] columnName = { "AlgorithmName", "Duration" }; 
    	 String[][] rowData ;
    	 String[] rowName;
    	 
    	 DefaultTableModel model = new DefaultTableModel();
    	 JTable table = new JTable();
    	 JScrollPane scrollPane = new JScrollPane();
    	 
    	 JPanel tableJPanel = new JPanel();
    	 JPanel headerJPanel = new JPanel();
    	 JPanel addJPanel = new JPanel();
    	 
    	 static OptSettingEditor settingEditor ;
    	 static OptSetting setting;
    	 
    	// static JPanel editJPanel ;
    	 
    	 JFrame disEditFrame = new JFrame();
    	 JFrame disaddFrame = new JFrame();
    	 
    	 Point  mousePoint ;
    	 String obName;
    	 
    	 OptAlgorithmManager manager = new OptAlgorithmManager();
    	 List<OptAlgorithm>  algorithmlist =  OptAlgorithmManager.getAllAlgorithms();
    	 
    	 
    	 String[] addrowData = new String[2];
    	 
    	 JPanel durationJPanel = new JPanel();
    	 
    	 JList<Object> rowNameList;
    	 JScrollPane addScrollPane;
    	 String rowListName;
    	 
    	 Box Editbox = Box.createVerticalBox();
    	 Box addCenterBox = Box.createHorizontalBox();
    	 Box addLeftBox = Box.createVerticalBox();
    	 Box addBottomBox = Box.createVerticalBox();
    	 JPanel addCenterJPanel = new JPanel();
    	 
    	 //--
    	 JPanel bfgsJPanel ,cgJPanel , dfpJPanel , lmJPanel,newSDJPanel ,newTRJPanel, pSJPanel, deJPanel,psoJPanel,splxJPanel,trJPanel;
    	 
    	public void initPanel(){
    		mOptmanagerPanel = new OptmanagerPanel();
    		
    		JFrame mJFrame = new JFrame();
    		mJFrame.setLayout(new BorderLayout());
    		mJFrame.add(mOptmanagerPanel.tableHeaderJPanel(),BorderLayout.NORTH);
    		mJFrame.add(mOptmanagerPanel.tablePanel(), BorderLayout.CENTER);
            mJFrame.setBounds(300, 300, 300, 100); 
            mJFrame.pack();
            mJFrame.setVisible(true);
            mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
    	}
    	
    	
    	public JPanel tablePanel(){
    		mOptmanagerPanel = new OptmanagerPanel();
    		 rowData = mOptmanagerPanel.getAlgorithmData();
    		 	
    		 model = new  DefaultTableModel(rowData,columnName);
    		 table = new JTable(model);
    		 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);  
    		 scrollPane = new JScrollPane(table);
    		 scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);		
    		 
    		table.addMouseListener(new MouseAdapter() {			
    				@Override
    				public void mouseReleased(MouseEvent e) {
    				  mousePoint = e.getPoint();
    				  System.out.println(table.rowAtPoint(mousePoint));	
    				 
    				  obName = table.getValueAt(table.rowAtPoint(mousePoint), 0).toString();
    				  System.out.println(obName);
    				  				
    				}
    			});
    			
    				
    		tableJPanel.setLayout(new BoxLayout(tableJPanel,BoxLayout.Y_AXIS));
    		tableJPanel.add(Box.createVerticalStrut(10));
    		tableJPanel.add(scrollPane);
    		tableJPanel.add(Box.createVerticalStrut(10));
    		
    		return tableJPanel;		
    	}
    	
    	public JPanel tableHeaderJPanel(){
    		mOptmanagerPanel = new OptmanagerPanel();
    				
    		headerJPanel.setLayout(new BoxLayout(headerJPanel, BoxLayout.X_AXIS));				
    		
    		addIcon = new ImageIcon("Picture/add.png");
    		addButton.setIcon(addIcon);
    		delIcon = new ImageIcon("Picture/remove.png");
    		delButton.setIcon(delIcon);
    		editIcon = new ImageIcon("Picture/edit.png");
    		editButton.setIcon(editIcon);
    		
    		//存在问题:未选,则点击删除报错,已解决:加try catch
    		 delButton.addActionListener(new ActionListener() {			
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				
    				try {
    					int row = table.rowAtPoint(mousePoint);
    					if (row !=-1 ) {
    						model.removeRow(table.rowAtPoint(mousePoint));	
    					}			
    				} catch (Exception e2) {
    					System.out.println("please choose first");
    				}							
    			}
    		});
    		 
    		//貌似都是第一个是正确的,但是点击第二次或者之后的可能就存在问题??已解决
    		 //还存在一个问题,修改过某一个值后,会在之后的修改框中显示同样名字的变量的修改后的值,而不是最开始的值:已解决
    		editButton.addActionListener(new ActionListener() {	
    				
    				@Override
    				public void actionPerformed(ActionEvent arg0) {
    					 try {	
    						 
    						   final int  row= table.rowAtPoint(mousePoint);
    						   if ( row !=-1 ) {
    								switch (obName) {
    								case "BFGS":
    									 Editbox.removeAll();
    									 Editbox.add(mOptmanagerPanel.bfgsjJPanel());
    									 disEditFrame.setTitle("BFGS");
    									 break;
    								case "CG":
    									Editbox.removeAll();
    									Editbox.add(mOptmanagerPanel.cgJpanel());
    									 disEditFrame.setTitle("CG");
    									break;
    								case "DFP":
    									Editbox.removeAll();
    									Editbox.add(mOptmanagerPanel.dfpJpanel());
    									disEditFrame.setTitle("DFP");
    									break;
    								case "LM":
    									Editbox.removeAll();
    									Editbox.add(mOptmanagerPanel.lmJpanel());
    									disEditFrame.setTitle("LM");
    									break;
    								case "NewTR":
    									Editbox.removeAll();
    									Editbox.add(mOptmanagerPanel.newTrJpanel());
    									disEditFrame.setTitle("NewTR");
    									break;
    								case "NewSD":
    									Editbox.removeAll();
    									Editbox.add(mOptmanagerPanel.newSdJpanel());
    									disEditFrame.setTitle("NewSD");
    									break;
    								case "PS":
    									Editbox.removeAll();
    									Editbox.add(mOptmanagerPanel.psJpanel());
    									disEditFrame.setTitle("PS");
    									break;
    								case "DE":
    									Editbox.removeAll();
    									Editbox.add(mOptmanagerPanel.deJpanel());
    									disEditFrame.setTitle("DE");
    									break;
    								case "PSO":
    									Editbox.removeAll();
    									Editbox.add(mOptmanagerPanel.psoJpanel());
    									disEditFrame.setTitle("PSO");
    									break;
    								case "SPLX":
    									Editbox.removeAll();
    									Editbox.add(mOptmanagerPanel.splxJpanel());
    									disEditFrame.setTitle("SPLX");
    									break;
    								case "TR":
    									Editbox.removeAll();
    									Editbox.add(mOptmanagerPanel.trJpanel());
    									disEditFrame.setTitle("TR");
    									break;
    								default:
    									System.out.println("please choose edit item");
    									break;
    								}
    							}							
    								editPanel();					
    					 }catch (Exception e) {
    							System.out.println("please choose again !");
    						 }				 				
    					}							
    			});	
    		addButton.addActionListener(new ActionListener() {		
    			@Override
    			public void actionPerformed(ActionEvent arg0) {
    				
    				addPanel();			
    			}
    		});		 
    				
    		headerJPanel.add(addButton);
    		headerJPanel.add(delButton);
    		headerJPanel.add(editButton);													
    		
    		return headerJPanel;		
    	}
    
    	public void addPanel(){
    		addLeftBox.removeAll();
    		disaddFrame.setVisible(true);
    	
    		mOptmanagerPanel = new OptmanagerPanel();
    		disaddFrame.setLayout(new BorderLayout());
    		addCenterJPanel.setLayout(new BorderLayout());
    
    		DefaultListModel listModel = new DefaultListModel<>();		
    		for (OptAlgorithm mAlgorithm :algorithmlist) {
    			listModel.addElement(mAlgorithm.getName().toString());
    		}		
    		rowNameList = new JList(listModel);
    		rowNameList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    
    		addScrollPane = new JScrollPane(rowNameList);
    		addScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    		
    		
    		rowNameList.addMouseListener(new MouseAdapter() {				
    				@Override
    				public void mouseClicked(MouseEvent e) {
    					try {
    						 System.out.println(rowNameList.getSelectedIndex());					 
    						 rowListName = rowNameList.getSelectedValue().toString();
    						 System.out.println(rowListName);	
    						 switch (rowListName) {
    						 case "BFGS":
    							 addCenterBox.removeAll();
    							 addCenterBox.add(mOptmanagerPanel.bfgsjJPanel());
    							 disaddFrame.validate();
    							 break;							 
    						 case "CG":
    							addCenterBox.removeAll();
    							addCenterBox.add(mOptmanagerPanel.cgJpanel());
    							disaddFrame.validate();
    							break;
    						 case "DFP":
    								addCenterBox.removeAll();
    								addCenterBox.add(mOptmanagerPanel.dfpJpanel());
    								disaddFrame.validate();
    								break;
    						 case "LM":
    								addCenterBox.removeAll();
    								addCenterBox.add(mOptmanagerPanel.lmJpanel());
    								disaddFrame.validate();
    								break;
    						 case "NewSD":
    								addCenterBox.removeAll();
    								addCenterBox.add(mOptmanagerPanel.newSdJpanel());
    								disaddFrame.validate();
    								break;
    						 case "NewTR":
    								addCenterBox.removeAll();
    								addCenterBox.add(mOptmanagerPanel.newTrJpanel());
    								disaddFrame.validate();
    								break;
    						 case "PS":
    								addCenterBox.removeAll();
    								addCenterBox.add(mOptmanagerPanel.psJpanel());
    								disaddFrame.validate();
    								break;
    						 case "DE":
    								addCenterBox.removeAll();
    								addCenterBox.add(mOptmanagerPanel.deJpanel());
    								disaddFrame.validate();
    								break;
    						 case "PSO":
    								addCenterBox.removeAll();
    								addCenterBox.add(mOptmanagerPanel.psoJpanel());
    								disaddFrame.validate();
    								break;
    						 case "SPLX":
    								addCenterBox.removeAll();
    								addCenterBox.add(mOptmanagerPanel.splxJpanel());
    								disaddFrame.validate();
    								break;
    						 case "TR":
    								addCenterBox.removeAll();
    								addCenterBox.add(mOptmanagerPanel.trJpanel());
    								disaddFrame.validate();
    								break;
    						default:					
    							break;
    						}
    					} catch (Exception e2) {
    						System.out.println("again");
    					}
    																	 
    				}
    			});	
    		addOkButton.addActionListener(new ActionListener() {
    			
    			@Override
    			public void actionPerformed(ActionEvent arg0) {
    				addrowData[0] = rowListName;
    				addrowData[1] = String.valueOf(0);
    				model.addRow(addrowData);
    				disaddFrame.setVisible(false);
    				
    			}
    		});
    		addCancleButton.addActionListener(new ActionListener() {			
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				disaddFrame.setVisible(false);	
    				
    				//System.exit(0);
    			}
    		});
    		
    		addLeftBox.add(addScrollPane);		
    		addBottomBox.add(initAddOkandCancleJPanel());
    		
    		addCenterJPanel.add(addCenterBox,BorderLayout.NORTH);
    		
    		disaddFrame.add(addLeftBox,BorderLayout.WEST);
    		disaddFrame.add(addCenterJPanel,BorderLayout.CENTER);
    		disaddFrame.add(addBottomBox,BorderLayout.SOUTH);
    		disaddFrame.setTitle("Add");
    		disaddFrame.setBounds(750,400,300,400);
    		//disaddFrame.pack();	
    		disaddFrame.setVisible(true);				
    	}
    	
    	public void editPanel(){
    			
    		//存在关闭后第二次打开有滚动条嵌套和确定取消按钮位置不一致的问题,已解决:box.removeAll();
    		editOkButton.addActionListener(new ActionListener() {									
    			@Override
    			public void actionPerformed(ActionEvent ae) {
    				if(settingEditor.stopEditing()){}	
    				disEditFrame.setVisible(false);
    				addBottomBox.removeAll();
    			}
    		});	
    		editCancleButton.addActionListener(new ActionListener() {
    			
    			@Override
    			public void actionPerformed(ActionEvent arg0) {
    				disEditFrame.setVisible(false);	
    				addBottomBox.removeAll();
    				
    			}
    		});
    
    		Editbox.add(initEditOkandCancleJPanel());
    		
    		disEditFrame.add(Editbox);		
    		disEditFrame.setBounds(750,400,300,400);
    		disEditFrame.setVisible(true);
    		disEditFrame.pack();							
    	}
    	
    	public String[][] getAlgorithmData(){
         
    	     rowData = new String[algorithmlist.size()][2];
    	     for (int i = 0; i < algorithmlist.size(); i++) {
    			rowData[i][0] = algorithmlist.get(i).getName();
    			rowData[i][1] = String.valueOf(i);
    		}	     
    		return rowData;	     
    	}
    	
    	/*public String[] getRowName(){
    		rowName = new String[algorithmlist.size()];
    		for (int i = 0; i < algorithmlist.size(); i++) {
    			rowName[i] = algorithmlist.get(i).getName();
    		}
    		return rowName;		
    	}*/
    
    	public JPanel initAddOkandCancleJPanel(){
    		okandCancleJPanel = new JPanel();
    		okandCancleJPanel.add(addOkButton);
    		okandCancleJPanel.add(addCancleButton);		
    		return okandCancleJPanel;		
    	}
    	public JPanel initEditOkandCancleJPanel(){
    		okandCancleJPanel = new JPanel();
    		okandCancleJPanel.add(editOkButton);
    		okandCancleJPanel.add(editCancleButton);		
    		return okandCancleJPanel;		
    	}
    	/*public JPanel initdurationJPanel(){
    		durationJPanel.setLayout(new GridLayout(1, 2,30,10));
    		durationJPanel.add(new Label("Duration"));
    		durationJPanel.add(new TextField(0));		
    		return durationJPanel;		
    	}*/
    
    	public JPanel bfgsjJPanel(){
    		 setting = new BFGSSetting();
    		 settingEditor = new BFGSSettingEditor((BFGSSetting) setting);
    		 bfgsJPanel = (JPanel) settingEditor.getEditorComponent();
    		return bfgsJPanel;		
    	}
    	public JPanel cgJpanel(){
    		setting = new CGSetting();
    		 settingEditor = new CGSettingEditor((CGSetting) setting);
    		  cgJPanel = (JPanel) settingEditor.getEditorComponent();
    		  return cgJPanel;
    	}
    	public JPanel dfpJpanel(){
    		setting = new DFPSetting() ;
    		settingEditor = new DFPSettingEditor((DFPSetting) setting);
    		dfpJPanel = (JPanel) settingEditor.getEditorComponent();
    		  return dfpJPanel;
    	}
    	public JPanel lmJpanel(){
    		setting = new LMSetting();
    		settingEditor = new LMSettingEditor((LMSetting) setting);
    		lmJPanel = (JPanel) settingEditor.getEditorComponent();
    		  return lmJPanel;
    	}
    	public JPanel newTrJpanel(){
    		setting = new NewTRSetting();
    		settingEditor = new NewTRSettingEditor((NewTRSetting) setting);
    		newTRJPanel = (JPanel) settingEditor.getEditorComponent();
    		  return newTRJPanel;
    	}
    	public JPanel newSdJpanel(){
    		setting = new NewSDSetting();
    		settingEditor = new NewSDSettingEditor((NewSDSetting) setting);
    		newSDJPanel = (JPanel) settingEditor.getEditorComponent();
    		  return newSDJPanel;
    	}
    	public JPanel psJpanel(){
    		setting = new PatternSearchSetting();
    		settingEditor = new PatternSearchSettingEditor((PatternSearchSetting) setting);
    		pSJPanel = (JPanel) settingEditor.getEditorComponent();
    		  return pSJPanel;
    	}
    	public JPanel deJpanel(){
    		setting = new DifferentialEvolutionSetting();
    		settingEditor = new DifferentialEvolutionSettingEditor((DifferentialEvolutionSetting) setting);
    		deJPanel = (JPanel) settingEditor.getEditorComponent();
    		  return deJPanel;
    	}
    	public JPanel psoJpanel(){
    		setting = new PSOSetting();
    		settingEditor = new PSOSettingEditor((PSOSetting) setting);
    		psoJPanel = (JPanel) settingEditor.getEditorComponent();
    		  return psoJPanel;
    	}
    	public JPanel splxJpanel(){
    		setting = new SimplexSetting();
    		settingEditor = new SimplexSettingEditor((SimplexSetting) setting);
    		splxJPanel = (JPanel) settingEditor.getEditorComponent();
    		  return splxJPanel;
    	}
    	public JPanel trJpanel(){
    		setting = new TRSetting();
    		settingEditor = new TRSettingEditor((TRSetting) setting);
    		trJPanel = (JPanel) settingEditor.getEditorComponent();
    		  return trJPanel;
    	}
    	
    	
    	
    
    }
    


  • 相关阅读:
    iOS:抽屉侧滑动画两种形式(1、UIView侧滑 2、ViewController侧滑)
    深入浅出 React Native:使用 JavaScript 构建原生应用
    JQuery:通过noConflict()方法同时使用jQuery 和其他框架
    JQuery AJAX: 了解jQuery AJAX
    iOS:iOS开发非常全的三方库、插件等等
    JavaScript:实现瀑布流
    iOS:crash崩溃日志分析
    敏捷开发一千零一夜
    江恩交易战法
    苹果:贩卖高科技的美学体验
  • 原文地址:https://www.cnblogs.com/riskyer/p/3268556.html
Copyright © 2011-2022 走看看