2013-08-01 59 views
-1

我的表中有JComboBox。如果用戶從組合框中選擇「其他」,我需要在表格中隱藏第3列。ActionListerner更改整行

代碼

 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.For示例

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

+0

你在做什麼是錯** **(如在你前面的問題一個已經評論) - 這是瘋狂的行動上渲染器的狀態(這充其量不可預知) – kleopatra

+0

我不明白。你能詳細說明一下,我可以修復我的代碼。 –

+0

就像這樣簡單:不要聽_rendering_組件,不要訪問_editing_組件 - 兩者都沒有意義。沒有冒犯的意思,但如果你不明白這一點,現在是時候在Swing基礎上新鮮出爐;-) – kleopatra

回答

2

您刪除列:

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

相反,你應該在某些細胞發生變化的值。

改爲使用此方法:table.setValueAt()。 Java文檔:setValueAt

在您的例子:

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

我可以得到任何示例代碼? –

+1

添加了示例,但請注意,您必須閱讀javadoc才能學習java – Tala