Java - Jtable - 不同颜色的单元格

Posted

技术标签:

【中文标题】Java - Jtable - 不同颜色的单元格【英文标题】:Java - Jtable - cells with different colors 【发布时间】:2017-09-11 22:15:08 【问题描述】:

我已经看到了一些例子,但仍然无法理解如何解决这个问题,可能没有一个干净的解决方案.. 我正在尝试通过使用 10*10 的 Jtable 作为单元格来构建 John Conway 的生命游戏。我知道如何更改表格背景颜色(所有单元格),但对于特定单元格颜色更改,我无法做到这一点。我知道,我需要用 CellRenderer 创建一个类,但我也无法理解它..

这是我的代码:

public class theGame 

    public static void main(String [] args) 

        theMatrix gui = new theMatrix();

        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gui.setSize(550,450);
        gui.setVisible(true);
        gui.setTitle("Game Of Life");



        JOptionPane.showMessageDialog(null, "  Welcome John Conway's Game Of Life  ");
        int replay = JOptionPane.showConfirmDialog(null, "Would you like to see the next generation?", "Close?", JOptionPane.YES_NO_OPTION);

        if (replay == JOptionPane.YES_OPTION);

    


public class theMatrix extends JFrame  

    JTable table;

    public theMatrix() 
        setLayout(new FlowLayout());
        String[] columNames = "", "", "", "", "", "", "", "", "", "";

        Object[][] data =  // Create a 10*10 table with default values.

            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null
        

        table = new JTable(data, columNames);
        table.setPreferredScrollableViewportSize(new Dimension(500, 500));
        table.setRowHeight(40);
        table.setBackground(Color.lightGray);

        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane);

    

【问题讨论】:

Concepts: Editors and Renderers 和 Using Custom Renderers 单元格渲染器应该使用特定单元格的数据来确定应该如何渲染它 是的,我会将我的表格更改为 0,1,然后尝试将它们着色为游戏应有的不同类型.. 换色如何?什么颜色代表什么价值?并始终在您的问题中展示您的最佳尝试代码,以创建更好的问题并获得更好的帮助。 谢谢!我想我明白如何在这个答案的帮助下解决它——link 【参考方案1】:

这是一个自定义单元格渲染的示例,它根据行和列更改背景颜色:

public class TheMatrix extends JFrame 

    JTable table;

    public TheMatrix() 
        setLayout(new FlowLayout());
        String[] columNames = "", "", "", "", "", "", "", "", "", "";

        Object[][] data =  // Create a 10*10 table with default values.

            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null
        ;

        table = new JTable(data, columNames);
        table.setPreferredScrollableViewportSize(new Dimension(500, 500));
        table.setRowHeight(40);
        table.setDefaultRenderer(Object.class, new MyRenderer());

        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane);
    


class MyRenderer implements TableCellRenderer 

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
                                    boolean hasFocus, int row, int col) 
        JTextField cell = new JTextField();

        cell.setBackground(((row % 2) == 0) && ((col % 2) == 0) ? Color.WHITE : Color.BLACK);
        return cell;
      

【讨论】:

以上是关于Java - Jtable - 不同颜色的单元格的主要内容,如果未能解决你的问题,请参考以下文章

定义单元格更改时的Java jTable颜色行

更改单元格颜色而不更改其他单元格中的颜色(Jtable)

jTable 单元格背景颜色

JTable 单元格颜色

JTable将单元格颜色设置为特定值

Swift tableview 单元格单选按钮实现