zoukankan      html  css  js  c++  java
  • java 控制表项删除、编辑、添加(实现接口)

    package com.platformda.optimize;
    
    import java.awt.BorderLayout;
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.util.ArrayList;
    import java.util.List;
    import javax.swing.DefaultListModel;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JToolBar;
    import javax.swing.ListSelectionModel;
    import javax.swing.table.DefaultTableModel;
    import org.openide.DialogDescriptor;
    import org.openide.DialogDisplayer;
    import org.openide.NotifyDescriptor;
    
    /**
     *
     * @author Administrator
     */
    public class OptDurationManager {
    
        public OptDurationManager() {
        }
        OptDurationManager mOptDurationManager;
        JButton addButton = new JButton();
        JButton delButton = new JButton();
        JButton editButton = new JButton();
        ImageIcon addIcon = new ImageIcon();
        ImageIcon delIcon = new ImageIcon();
        ImageIcon editIcon = new ImageIcon();
        OptAlgorithmManager manager = new OptAlgorithmManager();
        List<OptAlgorithm> algorithms = OptAlgorithmManager.getAllAlgorithms();
        List<OptAlgorithm> addAlgorithms = new ArrayList<OptAlgorithm>();
        String[] columnName = {"AlgorithmName", "Duration"};
        String[][] rowData;
        String[] addRowData;
        DefaultTableModel model = new DefaultTableModel();
        JTable table = new JTable();
        JScrollPane scrollPane = new JScrollPane();
        DefaultListModel listModel;
        JList optAlgorithmList;
        JScrollPane AddAlgorithmScroll;
        JPanel tableJPanel = new JPanel();
        JPanel headerJPanel = new JPanel();
        JPanel addJPanel = new JPanel();
        JPanel addCenterJPanel = new JPanel();
        JPanel editJPanel = new JPanel();
        Point mousePoint;
        String AlgorithmName;
        int delRow;
        static int addRow;
        static OptSettingEditor settingEditor;
        static OptSetting setting;
        DialogDescriptor AddDescriptor;
        DialogDescriptor EditDescriptor;
    
        public void DurationManager() {
            JFrame mJFrame = new JFrame();
            mJFrame.setLayout(new BorderLayout());
            mJFrame.add(initTableJScrollPane(), BorderLayout.CENTER);
            mJFrame.add(tableHeader(), BorderLayout.NORTH);
            mJFrame.setBounds(300, 300, 300, 100);
            mJFrame.setTitle("OptDurationManager");
            mJFrame.pack();
            mJFrame.setVisible(true);
            mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    
        public JPanel initTableJScrollPane() {
            int i = 0;
            rowData = new String[algorithms.size()][2];
            for (OptAlgorithm mAlgorithm : algorithms) {
                rowData[i][0] = mAlgorithm.getName();
                rowData[i][1] = String.valueOf(i++);
            }
    
            model = new DefaultTableModel(rowData, columnName);
            table = new JTable(model);
            table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    
            table.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseReleased(MouseEvent e) {
                    mousePoint = e.getPoint();
                    AlgorithmName = table.getValueAt(table.rowAtPoint(mousePoint), 0).toString();
                    System.out.println("(TableRow) " + table.rowAtPoint(mousePoint) + "  :  " + AlgorithmName);
                }
            });
    
            scrollPane = new JScrollPane(table);
            scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    
            tableJPanel.setLayout(new BorderLayout());
            tableJPanel.add(scrollPane, BorderLayout.NORTH);
    
            return tableJPanel;
        }
    
        public JPanel tableHeader() {
    
            headerJPanel.setLayout(new BorderLayout());
    
            addIcon = new ImageIcon("Picture/add.png");
            addButton.setIcon(addIcon);
            addButton.setToolTipText("add");
            delIcon = new ImageIcon("Picture/remove.png");
            delButton.setIcon(delIcon);
            delButton.setToolTipText("remove");
            editIcon = new ImageIcon("Picture/edit.png");
            editButton.setIcon(editIcon);
            editButton.setToolTipText("edit");
    
            delButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        delRow = table.rowAtPoint(mousePoint);
                        if (delRow != -1) {
                            int delresponse = JOptionPane.showConfirmDialog(null, "Are you sure to remove ?", "Warning", JOptionPane.OK_CANCEL_OPTION);
                            if (delresponse == JOptionPane.OK_OPTION) {
                                model.removeRow(table.rowAtPoint(mousePoint));
                                for (OptAlgorithm mAlgorithm : algorithms) {
                                    if (AlgorithmName.equals(mAlgorithm.getName())) {
                                         addAlgorithms.add(mAlgorithm);
                                    }
                                }                 
                                System.out.println("(Table)RowCount:  " + table.getRowCount());
                            }
                        }
                    } catch (Exception e2) {
                        JOptionPane.showMessageDialog(null, "please choose remove item first ! ");
                    }
                }
            });
            //问题1:删除后点击编辑,还可以编辑:连续点多次删除,会逐行删除,接着点击编辑,会编辑连续删除中的第一个
            //问题2:个数多于algorithms.size()的无法编辑(增添的行数已经增加到table中,并且可以获取)
            //---编辑是按行数来,删除后,也会出现编辑不对应的情况...
            //解决问题2:获取该行的mAlgorithm.getName(),然后遍历寻找该algorithm,即可实现对应,且不论行数为多少都可编辑
            editButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent ae) {
                    try {
                        
                        for (OptAlgorithm mAlgorithm : algorithms) {
                            if (AlgorithmName.equals(mAlgorithm.getName())) {
                                setting = mAlgorithm.getSetting();
                                settingEditor = mAlgorithm.getOptSettingEditor();
                            }
                        }
                        editJPanel.setLayout(new BorderLayout());
                        editJPanel.add(settingEditor.getEditorComponent(), BorderLayout.NORTH);
    
                        EditDescriptor = new DialogDescriptor(editJPanel, AlgorithmName, true,
                                DialogDescriptor.OK_CANCEL_OPTION, DialogDescriptor.OK_OPTION, null);
                        Object result = DialogDisplayer.getDefault().notify(EditDescriptor); // displays the dialog
                        if (result == NotifyDescriptor.OK_OPTION) {
                            if (settingEditor.stopEditing()) {
                            }
                            editJPanel.removeAll();
                        } else if (result == NotifyDescriptor.CANCEL_OPTION) {
                            editJPanel.removeAll();
                        }
                    } catch (Exception e) {
                        JOptionPane.showMessageDialog(null, "please choose edit item first !");
                    }
                }
            });
    
            //问题3:点击jlist后所显示的面板无法全显,解决:增加JList每个单元格的高度
            //已实现:如果某一个algorithm已经修改数据,那么在add时,点击该algorithm会显示已经修改过的值;
            //如果删除该algorithm,则再添加时点击该algorithm会显示最初的值
            //可改进:只有没有的algorithm,才需要添加;遇到的问题是:弹出的对话框太小。。。
            addButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent ae) {
                    addJPanel.removeAll();
                    addJPanel.setLayout(new BorderLayout());
    
                    listModel = new DefaultListModel();
                    for (OptAlgorithm mAlgorithm : algorithms) {
                        listModel.addElement(mAlgorithm.getName());
                    }
                    optAlgorithmList = new JList(listModel);
                    optAlgorithmList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                    optAlgorithmList.setFixedCellWidth(80);
                    optAlgorithmList.setFixedCellHeight(32);
    
                    AddAlgorithmScroll = new JScrollPane(optAlgorithmList);
                    AddAlgorithmScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    
                    addCenterJPanel.setLayout(new BorderLayout());
                    //没有设置大小的效果。。
                    addCenterJPanel.setSize(1000, 1000);
                   // addCenterJPanel.setBounds(new Rectangle(500, 1000));
                    
                    setting = algorithms.get(0).getSetting();
                    settingEditor = algorithms.get(0).getOptSettingEditor();
                    addCenterJPanel.add(settingEditor.getEditorComponent(), BorderLayout.NORTH);
                    addJPanel.add(addCenterJPanel, BorderLayout.CENTER);
    
                    optAlgorithmList.addMouseListener(new MouseAdapter() {
                        @Override
                        public void mouseClicked(MouseEvent me) {
                            try {
                                addRow = optAlgorithmList.getSelectedIndex();
                                System.out.println("(JListRow) " + addRow + "  :  " + optAlgorithmList.getSelectedValue().toString());
                                addCenterJPanel.removeAll();
                                setting = algorithms.get(addRow).getSetting();
                                settingEditor = algorithms.get(addRow).getOptSettingEditor();
                                addCenterJPanel.add(settingEditor.getEditorComponent(), BorderLayout.NORTH);
                                addJPanel.add(addCenterJPanel, BorderLayout.CENTER);
                                addJPanel.validate();
                            } catch (Exception e) {
                                JOptionPane.showMessageDialog(null, "Error !");
                            }
                        }
                    });
                    addJPanel.add(AddAlgorithmScroll, BorderLayout.WEST);
    
                    AddDescriptor = new DialogDescriptor(addJPanel, "addAlgorithm", true,
                            DialogDescriptor.OK_CANCEL_OPTION, DialogDescriptor.OK_OPTION, null);
                    Object result = DialogDisplayer.getDefault().notify(AddDescriptor); // displays the dialog
    
                    addRowData = new String[2];
                    if (result == NotifyDescriptor.OK_OPTION) {
                        addRowData[0] = algorithms.get(addRow).getName();
                        addRowData[1] = String.valueOf(0);
                        model.addRow(addRowData);
                    } else if (result == NotifyDescriptor.CANCEL_OPTION) {
                    }
                }
            });
    
            JToolBar tableToolBar = new JToolBar();
            tableToolBar.add(addButton);
            tableToolBar.add(delButton);
            tableToolBar.add(editButton);
            headerJPanel.add(tableToolBar, BorderLayout.NORTH);
    
            return headerJPanel;
        }
    }
    

    今天把前几天写的代码重写了一下,昨天写的被主管批了一顿,想想,的确挺垃圾的,就是玩码字的,java实现的是一种接口思想。

    今天写的是200多行,实现的是昨天500多行的作用,也算是一点进步吧。


     

  • 相关阅读:
    c#Enum的用法
    毕业一年小结
    Js正则表达式学习之test和compile的简单介绍
    kiss框架学习
    我对我自己的认识
    支付宝接入原理
    datarow用linq查询
    asp.net 下载任意格式文件 上传文件后台代码
    hash
    深入了解Erlang 垃圾回收机制以及其重要性(转)
  • 原文地址:https://www.cnblogs.com/riskyer/p/3275464.html
Copyright © 2011-2022 走看看