java - 如何为任何 JButton 添加两个不同的事件

标签 java swing event-handling jbutton

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

    public class Proyecto_Frame extends JFrame {
    private ImageIcon Aston;
    private ImageIcon Ferrari;
    private ImageIcon Lambo;
    private ImageIcon McLaren;
/**
 * 
 */
    private static final long serialVersionUID = 1L;



        public Proyecto_Frame () {
            super ("Carrera");
            this.setLayout(null);

            Aston = new ImageIcon (getClass().getResource("Aston1.png"));
            Ferrari = new ImageIcon (getClass().getResource("Ferrari1.png"));
            Lambo = new ImageIcon (getClass().getResource("Lambo1.png"));
            McLaren = new ImageIcon (getClass().getResource("McLaren1.png"));

            final JLabel Aston1 = new JLabel(Aston);
            final JLabel Ferrari1 = new JLabel(Ferrari);
            final JLabel Lambo1 = new JLabel(Lambo);
            final JLabel McLaren1 = new JLabel(McLaren);

            final JLabel Aston2 = new JLabel(Aston);
            final JLabel Ferrari2 = new JLabel(Ferrari);
            final JLabel Lambo2 = new JLabel(Lambo);
            final JLabel McLaren2 = new JLabel(McLaren);

            JButton B_Aston = new JButton (Aston);
            JButton B_Ferrari = new JButton (Ferrari);
            JButton B_Lambo = new JButton (Lambo);
            JButton B_McLaren = new JButton (McLaren);

            B_Aston.setBounds(new java.awt.Rectangle(30,30,230,75));
            this.getContentPane().add(B_Aston);

            B_Ferrari.setBounds(new java.awt.Rectangle(270,30,230,75));
            this.getContentPane().add(B_Ferrari);

            B_Lambo.setBounds(new java.awt.Rectangle(30,110,230,75));
            this.getContentPane().add(B_Lambo);

            B_McLaren.setBounds(new java.awt.Rectangle(270,110,230,75));
            this.getContentPane().add(B_McLaren);

            add(B_Aston);
            add(B_Ferrari);
            add(B_Lambo);
            add(B_McLaren);

            Aston1.setBounds(30, 250, 230, 75);
            Aston1.setVisible(false);
            Ferrari1.setBounds(30, 250, 230, 75);
            Ferrari1.setVisible(false);
            Lambo1.setBounds(30, 250, 230, 75);
            Lambo1.setVisible(false);
            McLaren1.setBounds(30, 250, 230, 75);
            McLaren1.setVisible(false);

            Aston2.setBounds(30, 350, 230, 75);
            Aston2.setVisible(false);
            Ferrari2.setBounds(30, 350, 230, 75);
            Ferrari2.setVisible(false);
            Lambo2.setBounds(30, 350, 230, 75);
            Lambo2.setVisible(false);
            McLaren2.setBounds(30, 350, 230, 75);
            McLaren2.setVisible(false);

            add(Aston1);
            add(Ferrari1);
            add(Lambo1);
            add(McLaren1);

            add(Aston2);
            add(Ferrari2);
            add(Lambo2);
            add(McLaren2);

            B_Aston.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e){
                    Aston1.setVisible(true);
                    Ferrari1.setVisible(false);
                    Lambo1.setVisible(false);
                    McLaren1.setVisible(false);
                }
            });
            B_Ferrari.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e){
            Aston1.setVisible(false);
            Ferrari1.setVisible(true);
            Lambo1.setVisible(false);
            McLaren1.setVisible(false);
            }
            });
            B_Lambo.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e){
                    Aston1.setVisible(false);
                    Ferrari1.setVisible(false);
                    Lambo1.setVisible(true);
                    McLaren1.setVisible(false);
                }
            });
            B_McLaren.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e){
                    Aston1.setVisible(false);
                    Ferrari1.setVisible(false);
                    Lambo1.setVisible(false);
                    McLaren1.setVisible(true);

                }

            });

        }

    }

嘿,我是 Java 的新手,得到了这段代码。所以,这里的问题是,我想选择其中的两个图像并将它们绘制在按钮下方以模拟比赛。当我单击任何 Jbutton 时,该图像可见而其他 3 个不可见,但我不知道如何离开该选择并使用相同的 JButton 做出下一个选择。谁能帮我?我阅读了许多主题和许多其他页面,但似乎没有找到答案。

谢谢,对格式感到抱歉,不习惯论坛格式。

最佳答案

我认为最简单的方法是检查是否已经进行了第一个选择,然后进行第二个选择,例如

if (playerA == null) {
    playerA = buttonSelection;
} else {
    playerB = buttonSelection;
}

您还需要一些方法来指示用户使用什么按钮选择什么。

关于java - 如何为任何 JButton 添加两个不同的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10261454/

相关文章:

java - 无法聚焦 JScrollPane?

Java - 在当前程序窗口之外获取选定的文本

java - Swing 中预定义的 JDialog

java - 线路输入节拍检测

java - 在 javascript 中使用 richfaces 迭代列表中的项目

java - 使用 RandomAccessFile 删除文件内容

java - 使用 FLowLayout 制作垂直滚动的 JFrame

linux - input.h中input_absinfo结构中fuzz和flat的解释

jquery - Enter 时防止文本区域换行 (jQuery)

java - 在 kotlin 中操作时间的最佳方式是什么?