如何给一个jtable单元格不同的背景颜色 [英] how to give a jtable cell different background colour
本文介绍了如何给一个jtable单元格不同的背景颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
类CustomTableCellRenderer扩展了DefaultTableCellRenderer {
private地图<整数,颜色> mapColors;
public CustomTableCellRenderer(){
mapColors = new HashMap<>();
public void setRowColor(int row,Color color){
// System.out.println(row +... happy ....+ color );
mapColors.put(row,color);
$ b @Override
public Component getTableCellRendererComponent(JTable table,Object obj,boolean isSelected,boolean hasFocus,int row,int column){
组件单元= super.getTableCellRendererComponent(table,obj,isSelected,hasFocus,row,1);
Color color = mapColors.get(row);
if(color!= null){
cell.setBackground(color);
} else {
cell.setBackground(isSelected?table.getSelectionBackground():table.getBackground());
}
row ++;
返回单元格;
}
}
解决方案
A单元格渲染器是应用于给定列的所有单元格的共享资源。为了为给定的行或行提供定制,您需要提供一种方法,让您可以记住您想要的行和它的颜色,例如...
public class CustomTableCellRenderer extends DefaultTableCellRenderer {
private Map< Integer,Color> mapColors;
$ b $ public CustomTableCellRenderer(){
mapColors = new HashMap< Integer,Color>();
public void setRowColor(int row,Color color){
mapColors.put(row,color);
$ b @Override
public Component getTableCellRendererComponent(JTable table,Object obj,boolean isSelected,boolean hasFocus,int row,int column){
组件单元= super.getTableCellRendererComponent(table,obj,isSelected,hasFocus,row,1);
Color color = mapColors.get(row);
if(color!= null){
cell.setBackground(color);
} else {
cell.setBackground(isSelected?table.getSelectionBackground():table.getBackground());
}
return cell;
例如...
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class Test {
public static void main(String [] args){
new Test();
$ b $ public Test(){
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
尝试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex){
ex.printStackTrace();
}
DefaultTableModel model = new DefaultTableModel(new Object [] {One},6);
CustomTableCellRenderer renderer = new CustomTableCellRenderer();
renderer.setRowColor(0,Color .RED);
renderer.setRowColor(1,Color.GREEN);
renderer.setRowColor(2,Color.BLUE);
renderer.setRowColor(3,Color.PINK);
renderer.setRowColor(4,Color.MAGENTA);
JTable table = new JTable(model);
table.getColumnModel()。getColumn(0).setCellRenderer(renderer);
JFrame frame = new JFrame(Testing);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
类CustomTableCellRenderer扩展了DefaultTableCellRenderer {
私有地图<整数,颜色> mapColors;
$ b $ public CustomTableCellRenderer(){
mapColors = new HashMap< Integer,Color>();
public void setRowColor(int row,Color color){
mapColors.put(row,color);
$ b @Override
public Component getTableCellRendererComponent(JTable table,Object obj,boolean isSelected,boolean hasFocus,int row,int column){
组件单元= super.getTableCellRendererComponent(table,obj,isSelected,hasFocus,row,1);
Color color = mapColors.get(row);
if(color!= null){
cell.setBackground(color);
} else {
cell.setBackground(isSelected?table.getSelectionBackground():table.getBackground());
}
return cell;
请参阅概念:编辑器和渲染器了解更多详情
i am getting only last row coloured..
class CustomTableCellRenderer extends DefaultTableCellRenderer {
private Map<Integer, Color> mapColors;
public CustomTableCellRenderer() {
mapColors = new HashMap<>();
}
public void setRowColor(int row, Color color) {
// System.out.println(row + "...happy...." + color);
mapColors.put(row, color);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(table, obj, isSelected, hasFocus, row, 1);
Color color = mapColors.get(row);
if (color != null) {
cell.setBackground(color);
} else {
cell.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
}
row++;
return cell;
}
}
解决方案
A cell renderer is a shared resource which is applied to ALL the cells for a given column. In order to provide customisation for a given row or rows, you need to provide a means by which you can remember which row you want and it's color, for example...
public class CustomTableCellRenderer extends DefaultTableCellRenderer {
private Map<Integer, Color> mapColors;
public CustomTableCellRenderer() {
mapColors = new HashMap<Integer, Color>();
}
public void setRowColor(int row, Color color) {
mapColors.put(row, color);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(table, obj, isSelected, hasFocus, row, 1);
Color color = mapColors.get(row);
if (color != null) {
cell.setBackground(color);
} else {
cell.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
}
return cell;
}
}
For example...
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
DefaultTableModel model = new DefaultTableModel(new Object[]{"One"}, 6);
CustomTableCellRenderer renderer = new CustomTableCellRenderer();
renderer.setRowColor(0, Color.RED);
renderer.setRowColor(1, Color.GREEN);
renderer.setRowColor(2, Color.BLUE);
renderer.setRowColor(3, Color.PINK);
renderer.setRowColor(4, Color.MAGENTA);
JTable table = new JTable(model);
table.getColumnModel().getColumn(0).setCellRenderer(renderer);
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
class CustomTableCellRenderer extends DefaultTableCellRenderer {
private Map<Integer, Color> mapColors;
public CustomTableCellRenderer() {
mapColors = new HashMap<Integer, Color>();
}
public void setRowColor(int row, Color color) {
mapColors.put(row, color);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(table, obj, isSelected, hasFocus, row, 1);
Color color = mapColors.get(row);
if (color != null) {
cell.setBackground(color);
} else {
cell.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
}
return cell;
}
}
}
See Concepts: Editors and Renderers for more details
这篇关于如何给一个jtable单元格不同的背景颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文