JButton行动执行了吗?

时间:2014-12-02 17:50:42

标签: java arrays jbutton

我创建了一个10x10网格的Jframe /按钮。每个jbutton都是网格的一部分。我正在尝试如何影响通过JFrame /按钮按下的每个按钮,因为我想最终将它变成战舰游戏。

frame.setLayout(new GridLayout(width,length));
            grid=new JButton[width][length]; 
            for(int y=0; y<length; y++){
                    for(int x=0; x<width; x++){
                            grid[x][y]=new JButton("("+x+","+y+")");     
                            frame.add(grid[x][y]);
                    }
            }

例如,我正在尝试一段基本代码,看看我是否可以通过点击将Jframe的颜色更改为红色,但它似乎无法正常工作。

 public void actionPerformed(ActionEvent e){
           if( e.getSource() instanceof JButton) {
               ((JButton)e.getSource()).setBackground(Color.red);
           }
        }

有人有任何想法吗?

3 个答案:

答案 0 :(得分:1)

我通过单独创建JButtons而不是作为网格的一部分来完成这项工作,但总体思路是一样的。 你无法调用actionPerformed,你必须有一个实现ActionListener的类,然后覆盖方法actionPerformed。

您需要为每个JButton添加一个actionlistener。在这种情况下,由于您希望将同一个侦听器应用于多个按钮,因此您需要在main下面创建一个单独的类。

    class buttonListener implements ActionListener {
    @Override
    public void actionPerformed (ActionEvent e) {
        ((JButton)e.getSource()).setBackground(Color.red);
    }
} 

按钮没有改变颜色的原因是因为你需要添加以下内容才能改变JButton的颜色

    JButton j = new JButton("test");
    j.setSize(100, 100);
    j.setContentAreaFilled(true);
    j.setOpaque(true);
    j.addActionListener(new buttonListener());

我知道这不是你问题最直接的答案,但我希望我至少能帮助你解决问题。

答案 1 :(得分:1)

我们说我们有一个按钮:JButton button。要在按下按钮时调用操作,必须向其添加动作侦听器。有两种方法可以做到这一点(我知道):

<强> ActionListener

我认为这比第二种方法更经常使用。编写IMO也更容易,更快捷:

JButton button = new JButton("Click me");
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("button was clicked!");
    }
}

<强> Action

另一种动作监听器。功能和用途有所不同。但是要实现一个与ActionListener一致的按钮,请执行以下操作:

Action buttonAction = new AbstractAction("Click me") {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("button was clicked!");
    }
}

JButton button = new JButton(action);

请注意,在两个示例中,我都使用匿名内部类。在大多数情况下,更优选使用命名内部类甚至外部类。


ActionListenerAction之间进行选择取决于具体情况(一如既往......叹息),我担心我无法对此事进行太多了解。谷歌是你的朋友。快速搜索提供了来自SO的帖子: link

答案 2 :(得分:0)

您可以创建自己的动作侦听器:

class MyActionListener implements ActionListener {
    private int x;
    private int y;


    public MyActionListener(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public void actionPerformed(ActionEvent e) {
        DoSomething(x, y);
    }
}

...
grid = new JButton[wid][len]; 
for(int y = 0; y < len; y++){
    for(int x = 0; x < wid; x++){
        grid[x][y]=new JButton("("+x+","+y+")");     
        grid[x][y].addActionListener(new MyActionListener(x, y));
        frame.add(grid[x][y]);
    }
}