实现的内容为:点击表格某项,再点击删除钮,可实现删除点击表格某项,再点击编辑按钮,可实现内容改变点击添加按钮,可实现向表格中添加内容
总结:总的来说中间遇到了很多困难,但是都一步步的解决了。
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; } }