我有一个基本的JTable,其中填充了“项目编号”和对应的“颜色”,并且我需要将包含该颜色名称的单元格的颜色更改为该实际颜色,而不管它是否是是否选择。
这是我的JTable的代码:
String[] title = {"Item Number", "Color"};
String[][] listOfValues = {{"1", "red"}, {"2", "blue"}, {"3", "green"}};
JTable new_table = new JTable(listOfValues, title);
JScrollPane table_pane = new JScrollPane(new_table);
table_pane.setBounds(10, 10, 300, 230);
frame.getContentPane().add(table_pane);
布局是临时的。该表如下所示:
因此,在此表中,包含“红色”的单元格将为红色,包含“蓝色”的单元格将为蓝色,而包含“绿色”的单元格将为绿色。所有其他单元格仍保持白色。
我将如何实现?
此代码允许更改行的颜色
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.examen.navegacion;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
/**
*
* @author wilso
*/
public class Fiea {
public static void main(String[] args) {
JFrame frame = new JFrame("FrameDemo");
String[] title = {"Item Number", "Color"};
String[][] listOfValues = {{"1", "red"}, {"2", "blue"}, {"3", "green"}};
JTable new_table = new JTable(listOfValues, title);
JScrollPane table_pane = new JScrollPane(new_table);
table_pane.setBounds(10, 10, 300, 230);
frame.getContentPane().add(table_pane);
new_table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setBackground(getColor(value.toString()));
return c;
}
});
frame.pack();
frame.setVisible(true);
}
private static Color getColor(String color) {
switch (color) {
case "red":
return Color.RED;
default:
return Color.white;
}
}
}
结果是下一个
您可以实现自己的TableCellRenderer,并根据情况查找所有文本单元格,或查找第二列(您可以在CellRenderer实现中使用很多不同的创意方法来定位要在其中呈现的目标单元格。具体方式。)
此外,另一种选择是利用JLabel的html功能,然后在构建数据时执行。在简单的情况下,这也可以很好地工作,这意味着您不必实现自己的渲染器,而不是像您这样的情况。您可以使用JLabel的<html>
功能。
String colorString = "red"; String jLabelString = "<html><font color=" + colorString + ">" + colorString";
像这样的事情...
String[][] listOfValues = {{"1",jLabelString}, {"2","<html><font color=blue>blue"},etc,etc};