Java 如何使用hashMap设置行的颜色?
我想用所有不同的颜色给我的案例中的7行上色,但不是给整行上色,而是只给第一列上色Java 如何使用hashMap设置行的颜色?,java,swing,Java,Swing,我想用所有不同的颜色给我的案例中的7行上色,但不是给整行上色,而是只给第一列上色 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.util.HashMap; import java.util.Map; import javax.swing.JFrame; import javax.swing.JScroll
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
public class UsingHashTable extends JFrame {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rowData[][] = {
{ "Row1", "Row1", "Row1" },
{ "Row2", "Row2", "Row2" },
{ "Row3", "Row3", "Row3" },
{ "Row4", "Row4", "Row4" },
{ "Row5", "Row5", "Row5" },
{ "Row6", "Row6", "Row6" },
{ "Row7", "Row7", "Row7" }
};
Object columnNames[] = { "Column One", "Column Two", "Column Three" };
JTable table = new JTable(rowData, columnNames);
JScrollPane scrollPane = new JScrollPane(table);
table.setDefaultRenderer(Object.class, new Renderit());
frame.add(scrollPane, BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
在这里,我使用render类来完成这项工作并初始化贴图
然后我用钥匙检查行,但它没有帮助
class Renderit extends DefaultTableCellRenderer {
Map<Integer, Color> map = new HashMap<>();
public renderit() {
map.put(0, Color.blue);
map.put(1, Color.yellow);
map.put(2, Color.red);
map.put(3, Color.green);
map.put(4, Color.pink);
map.put(5, Color.orange);
map.put(6, Color.magenta);
}
@Override
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
Component comp = super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column
);
for(Map.Entry<Integer, Color> enp : map.entrySet()) {
int key = enp.getKey();
if(key==row) {
table.setBackground(enp.getValue());
} else if(key==row) {
table.setBackground(enp.getValue());
} else if(key==row) {
table.setBackground(enp.getValue());
} else if(key==row) {
table.setBackground(enp.getValue());
} else if(key==row) {
table.setBackground(enp.getValue());
} else if(key==row) {
table.setBackground(enp.getValue());
} else if(key==row) {
table.setBackground(enp.getValue());
}
}
return comp;
}
}
class Renderit扩展了DefaultTableCellRenderer{
Map Map=newhashmap();
公众意见{
map.put(0,颜色为蓝色);
地图。放置(1,颜色。黄色);
地图。放置(2,颜色。红色);
地图。放置(3,颜色。绿色);
地图。放置(4,颜色。粉红色);
地图。放置(5,颜色。橙色);
地图。放置(6,颜色。洋红色);
}
@凌驾
公共组件GetTableCellRenderComponent(
JTable表,对象值,
布尔值为已选,布尔值为焦点,
整数行,整数列){
Component comp=super.GetTableCellRenderComponent(
表,值,isSelected,hasFocus,行,列
);
对于(Map.Entry enp:Map.entrySet()){
int key=enp.getKey();
如果(键==行){
表1.setBackground(enp.getValue());
}else if(键==行){
表1.setBackground(enp.getValue());
}else if(键==行){
表1.setBackground(enp.getValue());
}else if(键==行){
表1.setBackground(enp.getValue());
}else if(键==行){
表1.setBackground(enp.getValue());
}else if(键==行){
表1.setBackground(enp.getValue());
}else if(键==行){
表1.setBackground(enp.getValue());
}
}
返回补偿;
}
}
我不知道我在哪里出错,请帮助。错误在
Renderit
类的gettableCellRenderComponent
方法中
表的背景。
相反,您应该只设置CellRenderComponentcomp
的背景李>
总而言之,您更正的方法可以如下所示:
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Component comp = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
for (Map.Entry<Integer, Color> enp : map.entrySet()) {
int key = enp.getKey();
if (key == row) {
comp.setBackground(enp.getValue());
}
}
return comp;
}
与您的问题无关,但是如果7个if-else
s都具有相同的条件,为什么您会有一个链呢?但是您能告诉我为什么您没有使用table.paint();什么时候使用它?@anrdggle TableCellRenderer(更准确地说,是您通过super.getTableCellRenderComponent
获得的)为您绘制。在Swing中,您从不自己调用paint
。相反,您依赖于Swing在适当的时间调用paint
。但这是一个不同的(非常大的)故事。只需谷歌搜索,你就会发现很多优秀的文章。
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Component comp = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
Color color = map.get(row);
if (color != null) {
comp.setBackground(color);
}
return comp;
}