JAVA 不同 class 中的 JButton 在按下时拒绝激活

JAVA JButton in a different class refuses to activate when pressed

我不明白为什么我的 yankeewhiskey JButton 不工作。现在我只希望他们在 romeo 大于 1 且 sierra 大于 1 时关闭程序。

import java.awt.*;
import java.lang.*;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.*;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import java.util.Scanner;

public class AlphaMenu extends JFrame /*implements actionPerformed*/
{

    private GraphicsDevice gamma;
    public JButton charlie, zulu, yankee, xray;
    public JFrame beta;
    public JPanel delta, echo, foxtrot, golf, hotel;
    public JTextArea whiskey, victor;
    public BorderLayout uniform;
    public ImageIcon bg;
    public JLabel tango;
    public int sierra, romeo;
    public Integer quebec, papa;
    public ActionEvent oscar;
    public ActionEvent november;

    public AlphaMenu()
    {
        //Initialization of Objects
        charlie = new JButton("EXIT");
        zulu = new JButton("Enter Time");
        yankee = new JButton("Enter Amount of Money");
        xray = new JButton("Calculate");
        sierra = 0;
        romeo = 0;
        quebec = new Integer(0);
        papa = new Integer(0);
        whiskey = new JTextArea(2, 15);
        victor = new JTextArea(2, 15);
        bg = new ImageIcon("background.gif");
        beta = new JFrame();
        delta = new JPanel();
        echo = new JPanel();
        foxtrot = new JPanel();
        golf = new JPanel();
        hotel = new JPanel();
        uniform = new BorderLayout();
        ImageIcon bg = new ImageIcon("background.gif");
        tango = new JLabel("");

        tango.setIcon(bg);

        //Modification of panels
        beta.add(delta, uniform.PAGE_END);
        beta.add(golf, uniform.PAGE_START);
        beta.add(echo, uniform.LINE_START);
        beta.add(foxtrot, uniform.LINE_END);
        beta.add(hotel, uniform.CENTER);

        golf.add(tango);

        //Modification of JButton charlie & adding of JButtons
        charlie.setPreferredSize(new Dimension(100, 50));
        delta.add(charlie);
        charlie.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                System.exit(0);
            }
        });
        echo.add(whiskey);
        echo.add(yankee);
        foxtrot.add(victor);
        foxtrot.add(zulu);


        //Modification of JFrame beta
        beta.setUndecorated(true);
        beta.setExtendedState(JFrame.MAXIMIZED_BOTH);
        beta.setResizable(false);
        beta.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        beta.setVisible(true);
    }

    public void buttonSetup() throws NumberFormatException
    {
        //Modification of JButton yankee & JTextArea whiskey & int sierra
        romeo = quebec.parseInt(whiskey.getText());
        yankee.setPreferredSize(new Dimension(300, 50));
        yankee.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent oscar)
            {
                System.exit(0);
            }
        });

        //Modification of JButton zulu & JTextArea victor & int romeo
        sierra = papa.parseInt(victor.getText());
        zulu.setPreferredSize(new Dimension(300, 50));
        zulu.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent november)
            {
                System.exit(0);
            }
        });

    }

    public void actionPerformed(ActionEvent e)
    {
    }

    public static void main(String[] args)
    {
        new AlphaMenu();
    }
}

因此,您有两个 JTextArea(JTextField 可能会更好)和一个按钮。您希望某些按钮在两个文本区域的文本都是大于 1 的整数时执行退出。

似乎没有在任何地方调用您的 buttonSetup() 函数。

无论如何,我会创建一个 ActionListener 来读取文本、转换为整数、测试您的条件并执行 exit()。这个 ActionListener 应该被添加到所有你想执行动作的按钮

final ActionListener al = new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        try {
            final int intRomeo = Integer.parseInt(romeo.getText());
            final int intSierra = Integer.parseInt(sierra .getText());

            if (intRomeo > 1 && intSierra > 1) {
                // whatever you want to do
                System.exit(0); 
            }
        } catch (/*NumberFormat*/ Exception e) {
            // ...not integers
        }
    };
}
whiskey.addActionListener(al);
yankee.addActionListener(al);

我必须补充:你用的变量名真的很糟糕。考虑选择更有意义的东西。

对于初学者来说,可读性...如果您为变量使用更合适的名称、缩进代码的不同部分并使用注释来帮助以通俗易懂的方式描述部分,这可能会对 "sloppiness" 有所帮助。也许 "btnExit" 和 "btnCalculate" 会让事情变得更容易导航。

向前看,您在这里也没有两个不同的 class,您有一个 class 和多种方法。这很好,但想通知你。我想也许你需要在你的动作监听器和每个按钮的格式之后将按钮添加到它们的面板。我自己刚刚接触了一些摇摆不定的东西,我注意到当我 运行 遇到这样的问题时,在代码中移动 .add() 函数很有帮助。试试下面的方法。我缩进并使用了新的注释命名约定,但代码使用了您的约定。

//add the pnlEcho to frmBeta
beta.add(echo, uniform.LINE_START);

//format btnYankee
yankee.setPreferredSize(new Dimension(300, 50));

//btnYankee action listener
yankee.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) { //default action event
        System.exit(0); //you could use this
        beta.dispose(); //or you could dispose the frame and
                        //do more work after it is gone
    }
});

//add btnYankee to pnlEcho
echo.add(yankee);

I'm failing to understand why my yankee and whiskey JButtons aren't working

变量wiskey不是JButton类型,而是JTextArea类型。