Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为任何JButton添加两个不同的事件_Java_Swing_Event Handling_Jbutton - Fatal编程技术网

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

Java 如何为任何JButton添加两个不同的事件,java,swing,event-handling,jbutton,Java,Swing,Event Handling,Jbutton,嘿,我是Java新手,得到了这段代码。所以,这里的问题是,我想选择其中的两幅图像,并在按钮下方绘制它们,以模拟比赛。当我单击任何Jbutton时,该图像可见,而其他3个则不可见,但我不知道如何离开该选项并使用这些相同的Jbutton进行下一个选择。有人能帮我吗?我读了很多文章和其他页面,但似乎没有找到答案 谢谢,抱歉的格式,不习惯论坛格式 例如,我认为最简单的方法是检查是否已经做出了第一个选择,然后做出第二个选择 import java.awt.event.ActionListener; imp

嘿,我是Java新手,得到了这段代码。所以,这里的问题是,我想选择其中的两幅图像,并在按钮下方绘制它们,以模拟比赛。当我单击任何Jbutton时,该图像可见,而其他3个则不可见,但我不知道如何离开该选项并使用这些相同的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);

                }

            });

        }

    }

此外,您还需要一些方法来指导用户使用what按钮选择什么。

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

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);

                }

            });

        }

    }

另外,您还需要一些方法来指导用户使用what按钮选择什么。

一个可能的解决方案我不太喜欢的一个解决方案是使用布尔值或其他变量来保持程序状态,比如称为boolean autoselect=false;。选择自动后,将此变量更改为true。在JButton的ActionListener中,使用if块根据此变量的状态确定代码应该执行的操作。换句话说,您可以根据程序的状态更改jbutton执行的操作


但在我看来,更好的方法是使用CardLayout简单地交换JPanel,并显示一个包含您的曲目和新JButtons的JPanel。这是因为您正在从程序的一个主要状态(设置游戏)更改为另一个状态(显示比赛),这些状态可能需要以完全不同的JPanel显示。

一个可能的解决方案我不太喜欢的是使用布尔值或其他变量来保持程序状态,称为布尔自动选择=false;。选择自动后,将此变量更改为true。在JButton的ActionListener中,使用if块根据此变量的状态确定代码应该执行的操作。换句话说,您可以根据程序的状态更改jbutton执行的操作

但在我看来,更好的方法是使用CardLayout简单地交换JPanel,并显示一个包含您的曲目和新JButtons的JPanel。这是因为您正在从程序的一个主要状态(设置游戏)更改为另一个状态(显示比赛),并且这些状态可能需要以完全不同的JPanel显示。

为此,我倾向于使用一个在其下方禁用JButton Start race的状态

将图像放入列表,并添加一个以检测选择。当选择更改时,请检查或列表,并对条目进行计数

如果数字等于1,则鼓励用户使用主GUI、弹出窗口或JOptionPane中的消息JLabel选择另一个。 如果数字等于2,则启用该按钮。 如果选择了3个或更多,请禁用该按钮并显示基于JOptionPane的错误消息,大意是此轨迹不够大,无法容纳3辆车!。 为此,我倾向于使用一个在它下面有一个禁用的JButton Start Race

将图像放入列表,并添加一个以检测选择。当选择更改时,请检查或列表,并对条目进行计数

如果数字等于1,则鼓励用户使用主GUI、弹出窗口或JOptionPane中的消息JLabel选择另一个。 如果数字等于2,则启用该按钮。 如果选择了3个或更多,请禁用该按钮并显示基于JOptionPane的错误消息,大意是此轨迹不够大,无法容纳3辆车!。
问题是,我现在只在Java上工作了一个多星期,对Java语言的许多内容不太了解,所以我试图使它尽可能简单,尽管这意味着要有一个非常扩展的代码,正如你可能看到的那样;尽管我将进一步研究如何实现这个方法,谢谢!问题是,我现在只在Java上工作了一个多星期,对Java语言的许多内容不太了解,所以我试图使它尽可能简单,尽管这意味着要有一个非常扩展的代码,正如你可能看到的那样;尽管我将进一步研究如何实现这个方法,谢谢!