我有一个Jtable,里面有一些值[都是字符串]。有些值在它们前面有“*”我需要着色。我可以使用Cell Renderer为那些具有“*”的单元着色。但在我为单元格着色后,我需要删除“*”而不更改单元格颜色。当我尝试编辑单元格值时,颜色会变回WHITE。我在这里想念的是什么 这是代码
public SimpleTable()
{
JPanel panel = new JPanel();
setTitle("Colored JTable");
setBounds(400, 400, 400, 250);
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
JTable table = new JTable(this.getRows(), this.getHeaders());
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
table.setDefaultRenderer(Object.class, new MyTableRenderer());
this.scrollPane = new JScrollPane(table);
panel.add(scrollPane);
getContentPane().add(panel);
}
这是我的单元格渲染器
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if(table.getValueAt(row, column).toString().contains("*"))
{
String v = table.getValueAt(row, column).toString().replace("*", "");
table.setValueAt(v, row, column);
cellComponent.setBackground(Color.YELLOW);
}
else
{
cellComponent.setBackground(Color.WHITE);
}
return cellComponent;
答案 0 :(得分:3)
选项:
我赞成后者作为更清洁的OOP解决方案。请注意,您的单元格渲染器应该只渲染 。它永远不应该改变表所持有的数据。
第一个例子:
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if(value != null && value.toString().contains("*")) {
value = value.toString().replace("*", "");
setBackground(Color.YELLOW);
} else {
setBackground(Color.WHITE);
}
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);