如何给一个jtable单元格不同的背景颜色 [英] how to give a jtable cell different background colour

查看:172
本文介绍了如何给一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆