我正在尝试为jTable创建自定义单元格渲染器。我承认,即使有这么多的阅读,我也无法理解如何将自定义组件添加为单元格渲染器。我想添加string.getBytes()
渲染器。
到目前为止,我已经尝试过这段代码:
JCheckBox
但无论我尝试添加到模型的哪一行,它都不会在表格中显示任何数据。
有人能告诉我一个正确的方法吗?
答案 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
来电,它看起来很不错。