[英]How to add a JCheckBox in JTable
我將CheckBox存儲在向量中,並將其添加到表的行中,但在表中未顯示為CheckBox。
這是代碼:
columns =new Vector();
columns.add("<html><b>DRUG NAME");
columns.add("<html><b>BRAND NAME");
columns.add("<html><b>SELECT");
chkMedicines=new JCheckBox();
rows=new Vector();
rows.add("CisPlatin");
rows.add("Platinol-AQ");
rows.add(chkMedicines);
rows.add("Carboplatin");
rows.add("Paraplatin");
rows.add(chkMedicines);
tblModel=new DefaultTableModel();
tblModel.setColumnIdentifiers(columns);
tblMedicines=new JTable(tblModel);
tblModel.addRow(rows);
add(new JScrollPane(tblMedicines));
add(chkMedicines);
為了使JTable在表單元格中將布爾值呈現為復選框,我們需要告訴表單元格存儲了布爾類型的數據。 為此,我們必須為JTable組件實現TableModel。
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import java.awt.*;
public class JTableBooleanAsCheckbox extends JPanel {
public JTableBooleanAsCheckbox() {
initializeUI();
}
private void initializeUI() {
setLayout(new BorderLayout());
setPreferredSize(new Dimension(450, 150));
JTable table = new JTable(new BooleanTableModel());
table.setFillsViewportHeight(true);
JScrollPane pane = new JScrollPane(table);
add(pane, BorderLayout.CENTER);
}
public static void showFrame() {
JPanel panel = new JTableBooleanAsCheckbox();
panel.setOpaque(true);
JFrame frame = new JFrame("JTable Boolean as Checkbox");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JTableBooleanAsCheckbox.showFrame();
}
});
}
class BooleanTableModel extends AbstractTableModel {
String[] columns = {"STUDENT ID", "NAME", "SCORE", "PASSED"};
Object[][] data = {
{"S001", "ALICE", 90.00, Boolean.TRUE},
{"S002", "BOB", 45.50, Boolean.FALSE},
{"S003", "CAROL", 60.00, Boolean.FALSE},
{"S004", "MALLORY", 75.80, Boolean.TRUE}
};
public int getRowCount() {
return data.length;
}
public int getColumnCount() {
return columns.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
}
@Override
public String getColumnName(int column) {
return columns[column];
}
//
// This method is used by the JTable to define the default
// renderer or editor for each cell. For example if you have
// a boolean data it will be rendered as a check box. A
// number value is right aligned.
//
@Override
public Class<?> getColumnClass(int columnIndex) {
return data[0][columnIndex].getClass();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.