2011-04-08 87 views

回答

1

不能確定某個按鈕,但這裏是一個工作示例把一個複選框:

import javax.swing.*; 
import javax.swing.table.*; 

public class Test { 
    public static void main(String [] args) throws Exception { 
    DefaultTableModel model = new DefaultTableModel(null, new String [] {"CheckMe", "Value"}) { 
           public Class getColumnClass(int c) { 
            switch (c) { 
            case 0: return Boolean.class; 
            default: return String.class; 
            } 
           } }; 
    JTable table = new JTable(model); 
    JFrame frame = new JFrame("CheckBox Test"); 
    frame.add(table); 
    model.addRow(new Object [] {true, "This is true"}); 
    model.addRow(new Object [] {false, "This is false"}); 
    frame.pack(); frame.validate(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    } 
} 
0

對於複選框:Herehere你會找到工作的例子。

對於按鈕:herehere你會找到工作的例子。

0

對於這一點,你必須寫一個TableCellRendererTableCellEditor

您可以從默認的swing實現中派生出來,以使其更容易。

在每個類中,您必須重寫這些接口的一種方法,並在其中檢查傳遞的rowcolumn參數;如果行和列都符合條件,則返回JCheckBoxJButton,否則返回super實現返回的JComponent(使用這些接口的默認swing實現時)。

1

正如你可以從khachik的答案中看到的,對於複選框的支持是由基於列的列類的表提供的。

但是,如果您只想要特定列的特定行上的複選框,那麼您需要重寫getCellRenderer(...)和getCellEditor(...)方法以返回給定的渲染器/編輯器細胞。例如:

public TableCellEditor getCellEditor(int row, int column) 
{ 
    int modelColumn = convertColumnIndexToModel(column); 

    if (modelColumn == 1 && row < 3) 
     return getDefaultEditor(Boolean.class); 
    else 
     return super.getCellEditor(row, column); 
}