在jcombo中完成更改时,表状态更改了事件调用

时间:2014-04-15 02:14:38

标签: java swing

我是摇摆新手,

我正在创建一个包含TopPanel和底部面板的窗口

TopPanel:中,我添加了4个组合,3个文本字段,一个按钮和一个Label(此标签用于选择颜色)。

BottomPanel: JTable中,上面的TopPanel元素各有一列。

问题1:当我点击jlabel并选择一种颜色(例如红色)时,我将其设置为topPanel jlabel的背景,它工作正常,并点击顶部面板的添加按钮,它成功添加到jtable和color列也很好(即红色)。

但是,当我从toppanel jlabel中选择一种颜色(例如;绿色)时,它的背景变化很好但是当我点击toppanel的任何组合框时,底部面板jtable的颜色列会改变

当我点击“添加”按钮时也会发生同样的事情

问题2:当我更改toppanel的一个jcombo时,调用所有其他jcombo框的操作performe事件

这是我的代码

public class MultiCompareWindow extends MultiCompareWindowElements implements
        ActionListener {

    public static JFrame jf = new JFrame();

    public static void main(String args[]) {
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        MultiCompareWindow mp = new MultiCompareWindow();
        mp.getJTablePanel();
        jf.add(mp.getMainPanel());
        Vector<String[]> data = new Vector<String[]>();
        String[] str = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
        data.add(str);
        mp.setDefinedSizeToElements();
        jf.setVisible(true);
    }

    public JPanel getMainPanel() {
        try {
            JPanel mainPanel = new JPanel(new BorderLayout());

            mainPanel.setBackground(NSColor.leftPanelcolor());

            JPanel centerPanel = new JPanel(new BorderLayout());
            String title = "Compare Setting";
            centerPanel.setBorder(BorderFactory.createTitledBorder(title));
            centerPanel.setBackground(NSColor.leftPanelcolor());
            centerPanel.add(getTopPanel(), BorderLayout.NORTH);
            centerPanel.add(getJTablePanel(), BorderLayout.CENTER);

            mainPanel.add(centerPanel, BorderLayout.NORTH);

            // These line will set the border of around the panel
            Border border = mainPanel.getBorder();
            Border margin = new EmptyBorder(5, 10, 0, 10);
            mainPanel.setBorder(new CompoundBorder(border, margin));

            return mainPanel;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public JPanel getJTablePanel() {
        try {
            JPanel jpanel = new JPanel(new BorderLayout());
            jpanel.setBackground(NSColor.leftPanelcolor());
            jtable = new JTable(new CustomTableModel(columnNames));
            // This will set CellRender to entire table
            jtable.setDefaultRenderer(Object.class, new ImageCellRender());
            JScrollPane jscrollPane = new JScrollPane(jtable);

            Dimension d = new Dimension(250, 200);
            jtable.setPreferredScrollableViewportSize(d);
            jtable.setRowHeight(23); // Which increase the row height
            setActionListeners();
            // This will set table background color Pydi
            jscrollPane.getViewport().setBackground(NSColor.leftPanelcolor());
            JTableHeader jtabHeader = jtable.getTableHeader();
            jtabHeader.setReorderingAllowed(false);
            jtabHeader.setBackground(new Color(208, 231, 245));
            jtabHeader.setPreferredSize(new Dimension(25, 25));

            Border border = jpanel.getBorder();
            Border margin = new EmptyBorder(0, 0, 10, 0);
            jpanel.setBorder(new CompoundBorder(border, margin));

            jpanel.add(jscrollPane);
            return jpanel;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    class CustomTableModel extends AbstractTableModel {

        private String[] columnNames = null;

        public Vector<String[]> data = null;

        public CustomTableModel(String[] columnNames) {
            this.columnNames = columnNames;
            data = new Vector<String[]>();
        }

        @Override
        public int getColumnCount() {
            // TODO Auto-generated method stub
            return columnNames.length;
        }

        @Override
        public int getRowCount() {
            // TODO Auto-generated method stub
            return data.size();
        }

        @Override
        public String getColumnName(int columnIndex) {
            return columnNames[columnIndex];
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            // TODO Auto-generated method stub
            if (columnIndex == 9)
                return jlblImge;

            if (columnIndex == 8) {
                JLabel jlblTmpColor = new JLabel();
                jlblTmpColor.setOpaque(true);
                jlblTmpColor.setBackground(jlblPaintColor.getBackground());
                return jlblTmpColor;
            }

            return data.get(rowIndex)[columnIndex];
        }

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return true;
        }

        public void setValueAt(Object value, int rowIndex, int columnIndex) {

            if (columnIndex == 8 || columnIndex == 9)
                return;

            data.get(rowIndex)[columnIndex] = value.toString();
            fireTableCellUpdated(rowIndex, columnIndex);
        }

        public void removeRow(int row) {
            data.remove(row);
            fireTableRowsDeleted(row, row);
        }

    }

    /**
     * This function set the Add button
     * 
     * @return
     */
    private JButton getAddButton() {

        jbuttonAdd = new JButton();

        Border edge = BorderFactory.createRaisedBevelBorder();
        Dimension size = new Dimension(65, 20);

        jbuttonAdd.setText("Add");
        jbuttonAdd.setToolTipText("Add line to tabel.");
        jbuttonAdd.setBorder(edge);
        jbuttonAdd.setFont(NSColor.mediumPlainFont());
        jbuttonAdd.setBackground(NSColor.buttonBgColor());
        jbuttonAdd.setForeground(NSColor.buttonFgColor());

        // This is causing the screen becaming blank for some time
        jbuttonAdd.setPreferredSize(size);

        jbuttonAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                StringBuffer msgBuffer = new StringBuffer();

                System.out.println("652 ----------------- "
                        + e.getActionCommand());
                String[] data = new String[10];
                data[0] = jtxtMeasureMentName.getText() == null ? "Hello"
                        : jtxtMeasureMentName.getText();
                data[1] = "A";// jcomboTestRun.getSelectedItem().toString();
                data[2] = "B";// jcomboTestPhase.getSelectedItem().toString();
                data[3] = "Elasped";// jcomboTimeFormat.getSelectedItem().toString();
                data[4] = "00:00:00";// jtxtStartDate.getText();
                data[5] = "00:10:22";// jspinnerStartTime.getValue().toString();
                data[6] = "12/01/12";// jtxtEndDate.getText();
                data[7] = "This";// jspinnerEndTime.getValue().toString();
                data[8] = "";
                data[9] = "";

                Vector<String[]> vector = new Vector<String[]>();
                vector.add(data);
                addDataInTable(vector);

            }
        });
        return jbuttonAdd;
    }

    class ImageCellRender extends DefaultTableCellRenderer {
        @Override
        public Component getTableCellRendererComponent(JTable table,
                Object value, boolean isSelected, boolean hasFocus, int row,
                int column) {
            // TODO Auto-generated method stub
            Component com = super.getTableCellRendererComponent(table, value,
                    isSelected, hasFocus, row, column);

            if (row % 2 == 0)
                com.setBackground(NSColor.leftPanelcolor());
            else
                com.setBackground(Color.WHITE);

            ImageIcon icon = new ImageIcon(
                    "C:\\Users\\Pydi\\Desktop\\delete.png");
            if (value != null && (column == 8 || column == 9)) {
                if (column == 8) {
                    System.out.println("1021 ----- getTableCell");
                    JLabel jlblTmpColor = new JLabel();
                    jlblTmpColor.setOpaque(true);
                    jlblTmpColor.setBackground(jlblPaintColor.getBackground());
                    return jlblTmpColor;
                }
                jlblImge.setHorizontalAlignment(JLabel.CENTER);
                // value is parameter which filled by byteOfImage
                jlblImge.setOpaque(true);
                jlblImge.setIcon(icon);

                if (row % 2 == 0)
                    jlblImge.setBackground(NSColor.leftPanelcolor());
                else
                    jlblImge.setBackground(Color.WHITE);
                jlblImge.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
                return jlblImge;
            }
            return com;
        }

    }

    private void setActionListeners() {
        try {
            jtable.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {
                    System.out.println(e.getClickCount());
                    JTable jtab = (JTable) e.getSource();
                    int row = jtab.getSelectedRow();
                    int col = jtab.getSelectedColumn();
                    if (col == 8) {
                        System.out.println("686------");
                        ((CustomTableModel) jtable.getModel()).removeRow(row);
                    }
                    System.out.println("row = " + row + " col = " + col);
                }

            });

            jtable.addMouseMotionListener(new MouseMotionListener() {

                @Override
                public void mouseMoved(MouseEvent e) {
                    // TODO Auto-generated method stub
                    try {
                        int colIndex = jtable.columnAtPoint(e.getPoint());
                        if (colIndex == 8 || colIndex == 9)
                            jtable.setCursor(new Cursor(Cursor.HAND_CURSOR));
                        else
                            jtable.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }

                }

                @Override
                public void mouseDragged(MouseEvent e) {
                    // TODO Auto-generated method stub

                }

            });

            jlblPaintColor.addMouseListener(new MouseAdapter() {

                public void mouseClicked(MouseEvent e) {
                    createColorChooser();
                }
            });
            jcomboScenarioNames.addActionListener(this);
            jcomboTestRun.addActionListener(this);
            jcomboTestPhase.addActionListener(this);
            jcomboTimeFormat.addActionListener(this);
            jcomboResolution.addActionListener(this);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void addDataInTable(Vector<String[]> data) {
        try {
            ((CustomTableModel) jtable.getModel()).data.add(data.get(0));
            jtable.revalidate();
            jtable.repaint();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        JComboBox jcombo = (JComboBox) e.getSource();
        System.out.println(jcombo.getName() + "*******************875");
    }
}

Plz解决了这个问题并解释了为什么

提前致谢

0 个答案:

没有答案