单击时如何使图像替换JButton

时间:2017-03-02 11:05:30

标签: java

目前正在尝试制作TicTacToe游戏,我设置了框架和9个按钮(玩家可以选择每个方格)。单击时为每个按钮添加功能时遇到了一些麻烦。

package OX;

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

public class OX{

public static void main(String[] args){
    JFrame frame = new JFrame("OX");
    frame.setSize(800,800);
    frame.setVisible(true);
    frame.getContentPane().setBackground(Color.BLACK);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel(new GridBagLayout());
    frame.add(panel);
    GridBagConstraints c = new GridBagConstraints();
    JButton button1 = new JButton("1");
    button1.setPreferredSize(new Dimension(100,100));
    c.gridx = 1;
    c.gridy = 1;
    c.insets = new Insets(50,50,50,50);     
    panel.add(button1, c);
    JButton button2 = new JButton("2");
    button2.setPreferredSize(new Dimension(100,100));
    c.gridx = 2;
    c.gridy = 1;
    panel.add(button2, c);
    JButton button3 = new JButton("3");
    button3.setPreferredSize(new Dimension(100,100));
    c.gridx = 3;
    c.gridy = 1;
    panel.add(button3, c);
    JButton button4 = new JButton("4");
    button4.setPreferredSize(new Dimension(100,100));
    c.gridx = 1;
    c.gridy = 2;
    panel.add(button4, c);
    JButton button5 = new JButton("5");
    button5.setPreferredSize(new Dimension(100,100));
    c.gridx = 2;
    c.gridy = 2;
    panel.add(button5, c);
    JButton button6 = new JButton("6");
    button6.setPreferredSize(new Dimension(100,100));
    c.gridx = 3;
    c.gridy = 2;
    panel.add(button6, c);
    JButton button7 = new JButton("7");
    button7.setPreferredSize(new Dimension(100,100));
    c.gridx = 1;
    c.gridy = 3;
    panel.add(button7, c);
    JButton button8 = new JButton("8");
    button8.setPreferredSize(new Dimension(100,100));
    c.gridx = 2;
    c.gridy = 3;
    panel.add(button8, c);
    JButton button9 = new JButton("9");
    button9.setPreferredSize(new Dimension(100,100));
    c.gridx = 3;
    c.gridy = 3;
    panel.add(button9, c);      
  }
}

我尝试过很多不同的想法,但似乎无法做到这一点。

谢谢!

2 个答案:

答案 0 :(得分:1)

首先,您的代码不是模块化的。我建议你用适当的课程模块化

Swing的重要接受是监听器类。编写按钮的功能;您需要实现ActionListener并构建此类 所有游戏逻辑都将在此Listener类中实现。

有一个单独的方法来验证此侦听器的游戏状态(谁赢/输)。这应该让你的任务变得简单。

请参阅 - https://docs.oracle.com/javase/8/docs/api/java/awt/event/ActionListener.html http://www.codejava.net/java-core/the-java-language/java-8-lambda-listener-example

希望这会有所帮助。干杯!

答案 1 :(得分:1)

package OX;

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

public class OX{

public static void main(String[] args){
    JFrame frame = new JFrame("OX");
    frame.setSize(800,800);
    frame.setVisible(true);
    frame.getContentPane().setBackground(Color.BLACK);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel(new GridBagLayout());
    frame.add(panel);
    GridBagConstraints c = new GridBagConstraints();        
    JButton button1 = new JButton("1");
    button1.setPreferredSize(new Dimension(100,100));
    c.gridx = 1;
    c.gridy = 1;
    c.insets = new Insets(50,50,50,50);
    button1.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            System.out.println("test");
            }
        });
    panel.add(button1, c);      
    JButton button2 = new JButton("2");
    button2.setPreferredSize(new Dimension(100,100));
    c.gridx = 2;
    c.gridy = 1;
    button2.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            System.out.println("test2");
            }
        });
    panel.add(button2, c);      
    JButton button3 = new JButton("3");
    button3.setPreferredSize(new Dimension(100,100));
    c.gridx = 3;
    c.gridy = 1;
    button3.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            System.out.println("test3");
            }
        });
    panel.add(button3, c);      
    JButton button4 = new JButton("4");
    button4.setPreferredSize(new Dimension(100,100));
    c.gridx = 1;
    c.gridy = 2;
    button4.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            System.out.println("test4");
            }
        });
    panel.add(button4, c);      
    JButton button5 = new JButton("5");
    button5.setPreferredSize(new Dimension(100,100));
    c.gridx = 2;
    c.gridy = 2;
    button5.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            System.out.println("test5");
            }
        });
    panel.add(button5, c);      
    JButton button6 = new JButton("6");
    button6.setPreferredSize(new Dimension(100,100));
    c.gridx = 3;
    c.gridy = 2;
    button6.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            System.out.println("test6");
            }
        });
    panel.add(button6, c);      
    JButton button7 = new JButton("7");
    button7.setPreferredSize(new Dimension(100,100));
    c.gridx = 1;
    c.gridy = 3;
    button7.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            System.out.println("test7");
            }
        });
    panel.add(button7, c);
    JButton button8 = new JButton("8");
    button8.setPreferredSize(new Dimension(100,100));
    c.gridx = 2;
    c.gridy = 3;
    panel.add(button8, c);
    button8.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            System.out.println("test8");
            }
        });     
    JButton button9 = new JButton("9");
    button9.setPreferredSize(new Dimension(100,100));
    c.gridx = 3;
    c.gridy = 3;
    panel.add(button9, c);      
    button9.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            System.out.println("test9");
            }
        });

    }
}

@Vijayan Kani

我将ActionListener添加到每个按钮