在JTable中显示JCheckBox

我有一个Jtable,我想在一个列中添加一个JCheckbox。 但是,当我创建一个JCheckbox对象时,列中会显示javax.swing.JCheckBox。请参阅图像。 你能告诉我如何修改吗? 我到处搜索,但似乎无法找到任何解决方案。 谢谢。

在此处输入图像描述

  1. 不要向TableModel添加组件,这不是TableModel的责任
  2. 您需要指定列的类类型。 假设你正在使用DefaultTableModel ,你可以简单地用一堆布尔填充列,这应该工作 – 测试之后,你需要覆盖DefaultTableModelgetColumnClass方法(或任何TableModel实现)并确保为在“复选框”列中,它返回Boolean.class

有关更多详细信息,请参见如何使用表

例如…

在此处输入图像描述

 import java.awt.EventQueue; import java.util.Random; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.table.DefaultTableModel; public class TestCardLayout { public static void main(String[] args) { new TestCardLayout(); } public TestCardLayout() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } Random rnd = new Random(); DefaultTableModel model = new DefaultTableModel(new Object[]{"Check boxes"}, 0) { @Override public Class getColumnClass(int columnIndex) { return Boolean.class; } }; for (int index = 0; index < 10; index++) { model.addRow(new Object[]{rnd.nextBoolean()}); } JTable table = new JTable(model); final JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new JScrollPane(table)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } }