Actionlistener更改整行

时间:2013-08-01 08:49:34

标签: java swing jtable actionlistener invisible

我的桌子上有JComboBox。如果用户从ComboBox中选择“其他”,我需要隐藏表中的第3列。

代码

        final TableColumn col5 = jTable1.getColumnModel().getColumn(4);
        col5.setPreferredWidth(150);
        final String EDIT = "edit";
        String[] options = new String[]{"Font Issue", "Text Issue", "Image Issue", "AI Issue", "Others"};
        JComboBox combo1 = new JComboBox(options);
        JComboBox combo2 = new JComboBox(options);
        col5.setCellEditor(new DefaultCellEditor(combo1));
        col5.setCellRenderer(new ComboBoxRenderer(combo2));
        combo2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String newSelection = col5.getCellEditor().getCellEditorValue().toString();
                String strOthersRemark = "";
                if (newSelection.equalsIgnoreCase("others")) {
                    jTable1.removeColumn(jTable1.getColumnModel().getColumn(3));
                }
            }
        });

代码工作正常,但有一个小问题。当用户选择其他时,它会删除整个列而不是行。例如

Row|Column1 | Column2 | Column3  | Column4  |
 1 | Test11 | Test12  | Test13   | Test14   |
 2 | Test21 | Test22  | Test23   | Test24   |
 3 | Test31 | Test32  | Test33   | Others   |

当用户选择Column4为Others时,它应该隐藏Test33,而不是整个Column3。我的代码删除了整个Column3。如果我只想隐藏Test33

,我该怎么办?

1 个答案:

答案 0 :(得分:2)

您要删除列:

 jTable1.removeColumn(jTable1.getColumnModel().getColumn(3));

相反,您应该更改某个单元格的值。

请改用此方法:table.setValueAt()。 Java doc:setValueAt

在你的例子中:

jTable1.setValueAt("", 3, 3);