为什么我只能在GUI构造函数中更改按钮背景颜色?

时间:2015-10-02 01:22:03

标签: java swing jpanel jbutton

import java.awt.*;

import javax.swing.*;
import java.util.Timer;

public class GUI extends JPanel
{


    private static final long serialVersionUID = 1L;
    private static final int ROWS = 50;
    private static final int COLS = 30;
    public JButton[][] buttons = new JButton[ROWS][COLS];



    public GUI()
    {
        setLayout(new GridLayout(ROWS, COLS, 1,1));
        for (int row = 0; row < buttons.length; row++) {
             for (int col = 0; col < buttons[row].length; col++) {
                JButton button = new JButton("");
                add(button);
                buttons[row][col] = button;
                }
             }
              buttons[0][0].setBackground(Color.BLACK);



    }
    public void  start()
    {
            GUI gui = new GUI();

              JFrame frame = new JFrame("The Game Of Life");
              frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
              frame.getContentPane().add(gui);
              frame.pack();
              frame.setLocationByPlatform(true);
              frame.setVisible(true);  


    }
    public void run() 
    {
        this.start();       
        this.setColor('g', 0, 0);





    }
    public void setColor(char c, int i, int j)
    {
        setLayout(new GridLayout(ROWS, COLS, 1,1));

        for (int row = 0; row < buttons.length; row++) {
             for (int col = 0; col < buttons[row].length; col++) {
                JButton button = new JButton("");
                add(button);
                buttons[row][col] = button;

        switch(c){
        case 'g':
            buttons[i][j].setBackground(Color.GREEN);
        case 'r':
            buttons[i][j].setBackground(Color.RED);
        case 'b':
            buttons[i][j].setBackground(Color.BLACK);
             }
        }
        }
    }
}   

我可以通过“按钮[0] [0]”来改变颜色,但其他任何地方似乎都没有用(按钮[0] [0]就是一个例子,它是唯一可以改变颜色的地方按钮颜色)类GUI是一个系统的一部分,应该创建生物学“生命游戏”这是Gui界面的代码我需要代码来创建一个50x30按钮的网格,我将最终制作每个按钮根据周围其他按钮的属性更改颜色。此时最大的问题是除非在GUI构造函数中完成,否则我无法使用按钮来更改颜色。如果有人可以帮助我,我将非常感谢这是CS项目的一部分。如果您认为您需要更多信息,我很乐意发布任何需要的信息。 附:我意识到代码可能有点乱,我一直在弄它,所以我道歉。

import java.awt.*;
import javax.swing.*;


public class View extends JPanel
{
    private static final long serialVersionUID = 1L;
    private static final int ROWS = 50;
    private static final int COLS = 30;
    GUI gui = new GUI();

    JFrame frame;

    public View()
   {

}

public void run()
{

    //timer.start();
    gui.run();


}   

public void setButtons(Cell[][] colorset)
{
    for(int i = 0; i<ROWS; i++)
    {
        for(int j = 0; j<COLS; j++)
        {
            switch(colorset[i][j].getCurrent())
            {
            case 0:
                gui.setColor('g', i, j);
            case 1:
                gui.setColor('r', i, j);
            case 2:
                gui.setColor('b', i, j);
            default:

            }
        }
    }
    //this.run();
}

}“

1 个答案:

答案 0 :(得分:2)

您的问题是您希望在程序运行时调用setColor(...)。解决方案是在某些事件代码中调用它,并且代码将取决于您想要触发其调用的事件。如果是JButton按下,则将其放在JButton的ActionListener中。如果你想要每个xxx mSec调用它,那么将它放在Swing Timer的ActionListener中。如果您希望它响应按键,则将其置于Key Bindings Action中。