2012-05-23 3 views
0

У меня есть JTable и у него есть JCheckBox и JComoboBox в двух разных столбцах. Когда я выбираю JCheckBox, который соответствует этой строке, JComboBox должен быть отключен. Пожалуйста, помогите мне.Отключить JComboBox внутри JTable при щелчке JCheckBox

+0

[? Что вы пробовали] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) – user1329572

ответ

4

Просто отключите редактирование ячейки на основе вашей модели. В вашей таблицеModel переопределите/внедрите метод isCellEditable(), чтобы вернуть «значение» этого флажка.

Хотя следующий пример не основан на JComboBox, он показывает, как отключить издание ячейки на основе значения флажка в начале строки:

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 
import javax.swing.table.DefaultTableModel; 

public class TestTable { 

    public JFrame f; 
    private JTable table; 

    public class TestTableModel extends DefaultTableModel { 

     public TestTableModel() { 
      super(new String[] { "Editable", "DATA" }, 3); 
      for (int i = 0; i < 3; i++) { 
       setValueAt(Boolean.TRUE, i, 0); 
       setValueAt(Double.valueOf(i), i, 1); 
      } 
     } 

     @Override 
     public boolean isCellEditable(int row, int column) { 
      if (column == 1) { 
       return (Boolean) getValueAt(row, 0); 
      } 
      return super.isCellEditable(row, column); 
     } 

     @Override 
     public Class<?> getColumnClass(int columnIndex) { 
      if (columnIndex == 0) { 
       return Boolean.class; 
      } else if (columnIndex == 1) { 
       return Double.class; 
      } 
      return super.getColumnClass(columnIndex); 
     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new TestTable().initUI(); 
      } 
     }); 
    } 

    protected void initUI() { 
     table = new JTable(new TestTableModel()); 
     f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setSize(300, 300); 
     f.setLocationRelativeTo(null); 
     f.add(new JScrollPane(table)); 
     f.setVisible(true); 
    } 

} 
+0

+1 для использования модели. – trashgod

+0

@trashgod Thx для редактирования, мой английский далеко не идеален ;-) Cheers –

+0

, но логика, основанная на знаниях Swing, не далеко от совершенства – mKorbel