无法使用自定义渲染器

时间:2015-07-31 10:31:56

标签: java swing jtable tablecellrenderer

我正在尝试为jTable创建自定义单元格渲染器。我承认,即使有这么多的阅读,我也无法理解如何将自定义组件添加为单元格渲染器。我想添加string.getBytes()渲染器。

到目前为止,我已经尝试过这段代码:

JCheckBox

但无论我尝试添加到模型的哪一行,它都不会在表格中显示任何数据。

有人能告诉我一个正确的方法吗?

1 个答案:

答案 0 :(得分:3)

工作示例:

require 'etc'
result = []
Etc.passwd { |user| result << user.name }
result

您只需要import java.awt.Component; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JTable; import javax.swing.JScrollPane; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellRenderer; public class test extends JFrame { public static DefaultTableModel model = new DefaultTableModel(0, 4) { public Class getColumnClass(int columnIndex) { if (columnIndex == 2 || columnIndex == 3) { return Boolean.class; } else { return Object.class; } } }; public static void main (String args[]){ JTable table = new JTable(); table.setDefaultRenderer(Boolean.class, new CheckboxTableCellRenderer()); model.addRow(new Object[] {"testData2","testData1",false,true}); table.setModel(model); JFrame frame = new JFrame(); frame.add(new JScrollPane(table)); frame.setSize(640,480); frame.setVisible(true); } public static class CheckboxTableCellRenderer<E> extends JCheckBox implements TableCellRenderer { @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column ){ setComponentOrientation(table.getComponentOrientation()); setFont(table.getFont()); if (!isSelected) { setBackground(table.getBackground()); setForeground(table.getForeground()); } else { setBackground(table.getSelectionBackground()); setForeground(table.getSelectionForeground()); } setSelected((Boolean) value); setEnabled(table.isEnabled()); return this; } } } 的自定义渲染器,但Boolean.class仅返回DefaultTableModel,因此会覆盖Object.class。可能还需要指定列数,请参阅构造函数调用。

getColumnClass不是关于单元格中的值,而是选择单元格/行,并且应该以反色(或其他)颜色显示。

也可能不需要添加isSelected

编辑看起来仍然很奇怪,您可能还需要定义自定义编辑器,但不确定。

编辑:如果按照@ trashgod的建议,我们只是放弃JScrollPane来电,它看起来很不错。