不在 jtable 的列内显示单选按钮组
Not showing radio button group inside column in jtable
我正在尝试添加类似于 http://www.java2s.com/Code/Java/Swing-Components/RadioButtonTableExample2.htm
的单选按钮组
在我的表单中,我遵循了上述教程,但我使用的是 AbstractTableModel
而不是 DefaultTableModel
。
这是我的代码,它没有在列上显示任何内容,没有错误:
StudentTableModel model = new StudentTableModel(studentList);
// JScrollPane scrollPane = new JScrollPane(table);
final JScrollPane scrollPane = new JScrollPane(
table,
JScrollPane.VERTICAL_SCROLLBAR_NEVER,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
new Dimension(d.width,table.getRowHeight()*rows));
// code for radio buttons
String[] answer = { "A", "B", "C" };
TableColumnModel columnModel = table.getColumnModel();
for (int tc = 7; tc < table.getColumnCount(); tc++)
{
columnModel.getColumn(tc).setCellRenderer(
new MainClass().new RadioButtonRenderer(answer));
columnModel.getColumn(tc).setCellEditor(
new MainClass().new RadioButtonEditor(new JCheckBox(), new MainClass().new RadioButtonPanel(
answer)));
}
table.setModel(model);
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
frame.getContentPane().add(navigation, BorderLayout.SOUTH);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
提前致谢
代码是尝试在设置模型之前设置渲染器和编辑器。因此没有可设置 renderer/editor 的列。必须首先设置模型,然后才会创建列 - 仅创建模型不会 link 到 table,table 事先不知道它将有多少列有。
可能你想要
StudentTableModel model = new StudentTableModel(studentList);
table.setModel(model); // moved from below
// JScrollPane scrollPane = new JScrollPane(table);
...
您所关注的示例是这样做的,实际上它创建了 table 并将模型作为参数...
提示:为什么 new MainClass()
在 new MainClass().new RadioButtonRenderer(...
和其他人中?你真的想要一个新的 MainClass 吗?将这些 类 声明为 static
并删除 new MainClass()
我正在尝试添加类似于 http://www.java2s.com/Code/Java/Swing-Components/RadioButtonTableExample2.htm
的单选按钮组在我的表单中,我遵循了上述教程,但我使用的是 AbstractTableModel
而不是 DefaultTableModel
。
这是我的代码,它没有在列上显示任何内容,没有错误:
StudentTableModel model = new StudentTableModel(studentList);
// JScrollPane scrollPane = new JScrollPane(table);
final JScrollPane scrollPane = new JScrollPane(
table,
JScrollPane.VERTICAL_SCROLLBAR_NEVER,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
new Dimension(d.width,table.getRowHeight()*rows));
// code for radio buttons
String[] answer = { "A", "B", "C" };
TableColumnModel columnModel = table.getColumnModel();
for (int tc = 7; tc < table.getColumnCount(); tc++)
{
columnModel.getColumn(tc).setCellRenderer(
new MainClass().new RadioButtonRenderer(answer));
columnModel.getColumn(tc).setCellEditor(
new MainClass().new RadioButtonEditor(new JCheckBox(), new MainClass().new RadioButtonPanel(
answer)));
}
table.setModel(model);
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
frame.getContentPane().add(navigation, BorderLayout.SOUTH);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
提前致谢
代码是尝试在设置模型之前设置渲染器和编辑器。因此没有可设置 renderer/editor 的列。必须首先设置模型,然后才会创建列 - 仅创建模型不会 link 到 table,table 事先不知道它将有多少列有。
可能你想要
StudentTableModel model = new StudentTableModel(studentList);
table.setModel(model); // moved from below
// JScrollPane scrollPane = new JScrollPane(table);
...
您所关注的示例是这样做的,实际上它创建了 table 并将模型作为参数...
提示:为什么 new MainClass()
在 new MainClass().new RadioButtonRenderer(...
和其他人中?你真的想要一个新的 MainClass 吗?将这些 类 声明为 static
并删除 new MainClass()