Java 如何将JCheckbox放在JTable上?
如何在Java 如何将JCheckbox放在JTable上?,java,swing,jtable,jbutton,jcheckbox,Java,Swing,Jtable,Jbutton,Jcheckbox,如何在JTable的特定行和列上放置JCheckbox或JButton?复选框:您将找到工作示例 对于按钮:您将找到一个工作示例。不确定按钮,但这里有一个用于放置复选框的工作示例: import javax.swing.*; import javax.swing.table.*; public class Test { public static void main(String [] args) throws Exception { DefaultTableModel model
JTable
的特定行和列上放置JCheckbox
或JButton
?复选框:您将找到工作示例
对于按钮:您将找到一个工作示例。不确定按钮,但这里有一个用于放置复选框的工作示例:
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);
}
}
为此,您必须编写一个
TableCellRenderer
和一个TableCellEditor
您可以从默认的swing实现派生,以使其更简单
在每个类中,您必须重写这些接口中的一个方法,并在其中检查传递的
行
和列
参数;如果行和列都符合您的条件,则返回JCheckBox
或JButton
,否则返回super
实现返回的JComponent
(使用这些接口的默认swing实现时).从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);
}
public TableCellEditor getCellEditor(int行,int列)
{
int modelColumn=convertColumnIndexToModel(列);
if(modelColumn==1&&row<3)
返回getDefaultEditor(Boolean.class);
其他的
返回super.getCellEditor(行、列);
}