[英]Why is a boolean value in JTable showing as true/false instead of a checkbox?
新的布爾值不應該顯示為復選框嗎? 而是顯示為真/假字符串值。 這就是我填充數據的方式:
Object[] columnNames4 = {"Name", "City", "Checkbox"};
Object[][] data = {
{"john smith",
"x", new Boolean(false)},
{"jenny m",
"y", new Boolean(false)}
};
JTable table4 = new JTable(data, columnNames4);
JScrollPane S3 = new JScrollPane(table4);
S3.setPreferredSize(new Dimension(300, 300));
創建AbstractTableModel的子類,並在方法getColumnClass()中為所需的列返回Boolean.class。
您需要設置一個TableCellRenderer和TableCellEditor
參見http://docs.oracle.com/javase/tutorial/uiswing/components/table.html
定義渲染器/編輯器后,您可以
將渲染器/編輯器定義為類型table.setDefaultRenderer(Boolean.class, new MyBooleanRender()); table.setDefaultEditor(Boolean.class, new MyBooleanCellEditor());
的默認渲染器table.setDefaultRenderer(Boolean.class, new MyBooleanRender()); table.setDefaultEditor(Boolean.class, new MyBooleanCellEditor());
table.setDefaultRenderer(Boolean.class, new MyBooleanRender()); table.setDefaultEditor(Boolean.class, new MyBooleanCellEditor());
定義呈現器/編輯器到一列TableColumnModel tcm = table.getColumnModel(); tcm.getColumn(4).setCellRenderer(new MyBooleanRender()); tcm.getColumn(4).setCellEditor(new MyBooleanCellEditor());
TableColumnModel tcm = table.getColumnModel(); tcm.getColumn(4).setCellRenderer(new MyBooleanRender()); tcm.getColumn(4).setCellEditor(new MyBooleanCellEditor());
您可以定義一個復選框cellRender,如下所示:
public class MyBooleanRender extends JCheckBox implements TableCellRenderer { private JCheckBox checkBox = this; /** * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent * (javax.swing.JTable, java.lang.Object, boolean, boolean, int, int) */ public Component getTableCellRendererComponent( JTable tbl, Object value, boolean isSelected, boolean hasFocus, int row, int column) { boolean val = false; if (Common.isEmpty(value)) { checkBox.setSelected(false); } else { try { val = ((Boolean) value).booleanValue(); } catch (Exception e) { } checkBox.setSelected(val); } if (Common.OPTIONS.highlightEmpty.isSelected() && value == Common.MISSING_VALUE) { checkBox.setBackground(Common.EMPTY_COLOR); } else if (value == Common.MISSING_REQUIRED_VALUE) { checkBox.setBackground(Common.MISSING_COLOR); } else { ... } checkBox.setSelected(val); return checkBox; } }
對於checkboxEditor,可以使用DefaultCellEditor類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.