2014-01-20 2 views
0

У меня есть метод, который возвращает значение DefaultTableModel, заполненное базой данных. Я хотел бы добавить флаги boolean для каждой записи, возвращенной добавлением нового столбца boolean в возвращаемый экземпляр DefaultTableModel. Пользователь должен иметь возможность только щелкнуть/отключить эти флажки (допускать множественный выбор), чтобы манипулировать некоторыми объектами карты, которые у меня есть в графическом интерфейсе. Другие столбцы должны быть недоступны для редактирования. Любые идеи о том, как достичь этого? До сих пор я пошел к следующему пункту, я продлил TableCellRenderer следующегоКак создать конкретный jQuery boolean column editable

public class UGIS_BooleanTableCellRenderer extends JCheckBox implements TableCellRenderer { 

      public UGIS_BooleanTableCellRenderer() { 
      setHorizontalAlignment(JLabel.CENTER); 
      } 

     @Override 
     public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int row, int column) { 
     if (isSelected) { 
      setForeground(table.getSelectionForeground()); 
      super.setBackground(table.getSelectionBackground()); 
      setBackground(table.getSelectionBackground()); 
     } else { 
      setForeground(table.getForeground()); 
      setBackground(table.getBackground()); 
     } 
     setSelected((value != null && ((Boolean) value).booleanValue())); 
     return this; 
     }  
} 

я могу переопределить isCellEditable метода также.

DefaultTableModel dm = new DefaultTableModel() { 
       @Override 
       public boolean isCellEditable(int row, int column) { 
        return column == 3; 
       } 
      }; 

Но как я делаю DefaultTableModel возвращенного методом, чтобы быть совместимыми с моим перекрытым например дм? Любая помощь по этому вопросу будет принята с благодарностью.

ответ

2

Вы можете использовать столбец CheckBox без написания собственного средства визуализации/редактора, просто переопределяя getColumnClass() метод TableModel. Вот простой пример для вашей колонки CheckBox:

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

public class Example extends JFrame { 

    public static void main(String... s){ 
     new Example(); 
    } 

    public Example(){ 
     DefaultTableModel model = new DefaultTableModel(4,4) { 
      @Override 
      public boolean isCellEditable(int row, int column) { 
       return column == 3; 
      } 

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

     JTable t = new JTable(model); 
     add(new JScrollPane(t)); 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 
} 
+0

работал как шарм. Благодаря! –

Смежные вопросы