[英]How do I add a JCheckBox to DefaultTableModel by adding a Boolean column?
I am trying to add a jcheckbox to the first column of a JTable, which uses a DefaultTableModel
. 我正在尝试将jcheckbox添加到JTable的第一列,该列使用DefaultTableModel
。 I tried returning a Boolean.class
for that column, but it doesn't work. 我尝试为该列返回一个Boolean.class
,但它不起作用。
I already have a jcombobox in the last column, but using the same method I used to add that in order to add a jcheckbox doesn't work. 我在最后一列中已经有一个jcombobox ,但是使用相同的方法我添加它以添加一个jcheckbox不起作用。 I read online that java automatically returns a checkbox for you if you render a Boolean.class
in a column, but using it also doesn't work. 我在网上读到,如果在列中呈现Boolean.class
,java会自动为您返回一个复选框 ,但使用它也不起作用。 I think this might be a problem in the way I am ordering the components. 我认为这可能是我订购组件的方式的问题。
//import statements.
public class CourseSelection extends GUIDesign implements ActionListener{
// lot of extraneous stuff,
JLabel termLabel;
String term;
JLabel departmentLabel;
String department;
String[] columns = {
"Select", "CRN", "Title", "Instructor", "Time",
"Days", "Location", "Section", "Code", "Mode of Grading"
};
int courses;
Object[][] data;
String[] modes = {"Audit", "Pass/Fail", "Letter Grding"};
// create the table here, with model.
JTable table;
DefaultTableModel model = new DefaultTableModel() {
Class[] types = {
Boolean.class, String.class, String.class, String.class,
String.class, String.class, String.class, String.class,
String.class, Object.class
};
// making sure that it returns boolean.class.
@Override
public Class getColumnClass(int columnIndex) {
return types[columnIndex];
}
};
JPanel termPanel = new JPanel();
JPanel departmentPanel = new JPanel();
JButton backButton = new JButton("Back");
JButton registerButton = new JButton("Register");
JButton refreshButton = new JButton("Refresh");
public CourseSelection(GTPort gPort) {
super("Course Selection", 3);
setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS));
header = new JPanel();
header.setSize(getWidth(), 30);
body = new JPanel();
body.setLayout(new BoxLayout(body,BoxLayout.Y_AXIS));
header.setBackground(color);
title.setFont(new Font("Helvetica", 1,20));
header.add(title);
termLabel = new JLabel("Term: " + term);
data = new Object[25][10];
model = new DefaultTableModel(data, columns);
table = new JTable(model);
table.setModel(model);
departmentLabel = new JLabel("Department: " + department);
termPanel.add(termLabel);
departmentPanel.add(departmentLabel);
JComboBox box = new JComboBox(modes);
JCheckBox checkBox = new JCheckBox();
// lot of other code I tried that doesn't work.
// table.getColumnModel().getColumn(1)
// .setCellEditor(table.getDefaultEditor(Boolean.class));
// table.getColumnModel().getColumn(1)
// .setCellRenderer(table.getDefaultRenderer(Boolean.class));
// table.setDefaultEditor(Boolean.class, new DefaultCellEditor(checkBox));
// table.setDefaultRenderer(Boolean.class, new DefaultTableCellRenderer());
// model.getColumnModel().getColumn(1)
// .setCellEditor(new DefaultCellEditor(checkBox));
// model.getColumnModel().getColumn(1)
// .setCellRenderer(new DefaultTableCellRenderer());
table.getColumnModel().getColumn(9)
.setCellEditor(new DefaultCellEditor(box));
// .setCellEditor(new DefaultCellEditor(box));
// table = new JTable(model);
body.add(termPanel);
body.add(departmentPanel);
body.add(table.getTableHeader());
body.add(table);
// body.add(body);
buttonPanel.add(backButton);
buttonPanel.add(refreshButton);
buttonPanel.add(registerButton);
backButton.addActionListener(this);
refreshButton.addActionListener(this);
registerButton.addActionListener(this);
add(header);
add(body);
add(buttonPanel);
gtPort = gPort;
}
}
You don't override getColumnClass()
in your model: 您不会覆盖模型中的getColumnClass()
:
model = new DefaultTableModel(data, columns); // nothing overridden here
table = new JTable(model);
table.setModel(model);
Override it, and it will work: 覆盖它,它将工作:
model = new DefaultTableModel(data, columns) {
@Override
public Class<?> getColumnClass(int column) {
...
}
};
table = new JTable(model);
table.setModel(model);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.