【问题标题】:Java - Jtable - cells with different colorsJava - Jtable - 不同颜色的单元格
【发布时间】: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);

    }
}

【问题讨论】:

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

标签: java jframe jtable jpanel conways-game-of-life


【解决方案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;
      }
}

【讨论】:

    猜你喜欢
    • 2011-08-06
    • 2012-10-03
    • 2015-03-20
    • 2015-11-29
    • 2014-08-24
    • 2011-11-03
    • 2011-08-14
    • 1970-01-01
    • 2019-09-09
    相关资源
    最近更新 更多