如何将 aJCheckbox
或 aJButton
放在 a 的特定行和列上JTable
?
问问题
7958 次
4 回答
2
不确定按钮,但这是一个放置复选框的工作示例:
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);
}
}
于 2011-04-08T12:11:18.643 回答
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);
}
于 2011-04-08T15:08:16.667 回答
0
为此,您必须编写 aTableCellRenderer
和 a TableCellEditor
。
您可以从默认的 swing 实现中派生,以使其更容易。
在每个类中,您必须重写这些接口的一个方法,并在其中检查传递的参数row
和column
参数;如果行和列都符合您的条件,则返回 aJCheckBox
或 a JButton
,否则返回实现JComponent
返回的super
值(当使用这些接口的默认 swing 实现时)。
于 2011-04-08T14:10:57.593 回答