2014-01-20 74 views
0

我有一個方法返回一個由數據庫填充的DefaultTableModel。我想要做的是添加布爾複選框到每個返回的記錄添加一個新的布爾列到返回的DefaultTableModel實例。用戶應該只能點擊/取消點擊這些複選框(應該允許多選)來操作GUI中的一些地圖對象。其他列應該是不可編輯的。任何想法如何實現這一目標?到目前爲止,我已經到以下一點,如下如何製作一個特定的jTable布爾列可編輯

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方法還我已延長的TableCellRenderer。

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

但我該如何使該方法返回的DefaultTableModel與我的被覆蓋的dm實例兼容?任何幫助,將不勝感激。

回答

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

像一個魅力一樣工作。謝謝! –