Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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 不同类中的Main方法可以';t检测按钮按下_Java - Fatal编程技术网

Java 不同类中的Main方法可以';t检测按钮按下

Java 不同类中的Main方法可以';t检测按钮按下,java,Java,我正在制作一个练习程序,它基本上是模拟赢/输的强力球门票。无论如何,主类在launchPowerBall.java中,单击时我试图检测的按钮在PowerBallGUI.java中。这个按钮可以自己工作,但是,launchPowerBall.java中的main无法检测到它,即使我自己设置了一些setter和getter。你知道我能做什么吗?因为即使我通过while(true)循环运行它,并且我一直按下按钮,似乎主方法没有检测到 下面是JButton的操作侦听器: start.addActionL

我正在制作一个练习程序,它基本上是模拟赢/输的强力球门票。无论如何,主类在
launchPowerBall.java
中,单击时我试图检测的按钮在
PowerBallGUI.java
中。这个按钮可以自己工作,但是,
launchPowerBall.java
中的main无法检测到它,即使我自己设置了一些setter和getter。你知道我能做什么吗?因为即使我通过
while(true)
循环运行它,并且我一直按下按钮,似乎主方法没有检测到

下面是JButton的操作侦听器:

start.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // If the button is pressed, delete text field and replace with new content
            setButtonPressed(true);
            outputText.setText("");
            outputText.setText(outText);
    }
});
以下是我尝试为主要方法所做的:

public static void main(String[] args) throws InterruptedException {

    // Build the GUI object
    PowerBallGUI GUI = new PowerBallGUI();
    GUI.buildGUI();
    //GUI.setTextArea("banana");

    // Build the PowerBall object
    PowerBall roll = new PowerBall();

    while(true) {
        if (GUI.getJButton().getModel().isPressed()) {
            System.out.println("TEST");
        }
    }
}
如果您需要查看我的代码,以下是三个文件:

1) https://gist.github.com/anonymous/e5950413470202cd1ac6d24e238ff693
2) https://gist.github.com/anonymous/773e4e4454a79c057da78eed038fade1
3) https://gist.github.com/anonymous/82335e634c1f84607d3021b4d683cc65
强力球

public class PowerBall {
    private int[] numbers = {0, 0, 0, 0, 0};
    private int[] lotteryNumbers = {0, 0, 0, 0, 0};
    private int powerBall;
    private int lotteryPowerBall;
    private double balance;
    private double winnings;

    /*** Constructor Methods ***/
    public PowerBall() {
        powerBall = 0;
        balance = 1000;
        winnings = 0;
    }

    /*** Mutator Methods ***/
    public void randomize() {
        int i;
        int highestNumber = 59;
        int highestPowerball = 32;
        int temp = 0;

        for (i = 0; i < numbers.length; i++) {
            // Choose a random number
            temp = (int)(Math.random() * highestNumber);
            numbers[i] = temp;
        }

        // Choose a random Powerball number
        powerBall = (int)(Math.random() * highestPowerball);

        // Choose the lottery numbers
        for (i = 0; i < lotteryNumbers.length; i++) {
            temp = (int)(Math.random() * highestNumber);
            lotteryNumbers[i] = temp;
        }

        lotteryPowerBall = (int)(Math.random() * highestPowerball);
    }

    public void calculate() {
        int matches = 0;
        int powerballMatches = 0;

        if (balance > 0) {
            // Check to see if there are any matches between the two sets of numbers
            for (int i = 0; i < numbers.length; i++) {
                for (int j = 0; j < lotteryNumbers.length; j++) {
                    if (numbers[i] == lotteryNumbers[j]) {
                        matches++;
                    }
                }
            }

            // Check to see if the two different powerball numbers match
            if (powerBall == lotteryPowerBall) {
                powerballMatches = 1;
            }

            // Calculate the balance/winnings if there were any matches
            if (matches == 0 && powerballMatches == 0) {
                balance = balance - 2;
                winnings = winnings - 2;
            } else if (matches == 0 && powerballMatches == 1) {
                balance = balance + 4;
                winnings = winnings + 4;
            } else if (matches == 0 && powerballMatches == 0 || matches == 1 && powerballMatches == 0) {
                balance = balance - 2;
                winnings = winnings - 2;
            } else if (matches == 2 && powerballMatches == 1) {
                balance = balance + 7;
                winnings = winnings + 7;
            } else if (matches == 3 && powerballMatches == 0) {
                balance = balance + 7;
                winnings = winnings + 7;
            } else if (matches == 3 && powerballMatches == 1) {
                balance = balance + 100;
                winnings = winnings + 100;
            } else if (matches == 4 && powerballMatches == 0) {
                balance = balance + 100;
                winnings = winnings + 100;
            } else if (matches == 4 && powerballMatches == 1) {
                balance = balance + 50000;
                winnings = winnings + 50000;
            } else if (matches == 5 && powerballMatches == 0) {
                balance = balance + 1000000;
                winnings = winnings + 1000000;
            } else if (matches == 5 && powerballMatches == 1) {
                balance = balance + 10000000;
                winnings = winnings + 10000000;
            }
            //System.out.println("There is currently " + matches + " number matches.");
            //System.out.println("There is currently " + powerballMatches + " powerball number matches.\n");

        } else {
            System.out.println("YOU ARE BROKE!");
        }
    }

    /*** Accessor/Observor Methods ***/
    public void displayBalance() {
        System.out.print("Your balance is at: $");
        System.out.printf("%.2f", balance);
    }

    public void displayWinnings() {
        System.out.print("\nYou have currently won: $");
        System.out.printf("%.2f", winnings);
        System.out.println("\n");
    }

    public String toString() {
        StringBuilder builder = new StringBuilder();
        StringBuilder builder2 = new StringBuilder();

        if (numbers.length == lotteryNumbers.length) {
            for (int i = 0; i < numbers.length; i++) {
                if (i < numbers.length - 1) {
                    builder.append(numbers[i] + ", ");
                    builder2.append(lotteryNumbers[i] + ", ");
                } else {
                    builder.append(numbers[i] + " + ");
                    builder2.append(lotteryNumbers[i] + " + ");
                }
            }
        } else {
            return "ERROR: Numbers max set of numbers doesn't match Lottery Numbers max set of numbers!\n";
        }
        return "Your set of numbers were: " + builder + Integer.toString(powerBall) + 
                "\nThe powerball numbers were: " + builder2 + lotteryPowerBall;
    }
}


简单的解决方案是在
main
方法中获取您正在“尝试”执行的功能,并将其放入
ActionListener

start.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // If the button is pressed, delete text field and replace with new content

        PowerBall roll = new PowerBall();
        roll.randomize();
        System.out.println(roll.toString());
        roll.calculate();
        roll.displayBalance();
        roll.displayWinnings();

        setButtonPressed(true);
        outputText.setText("");
        outputText.setText(outText);
    }
});
如果你“真的”想做更多的工作,你需要生成某种观察者模式,当事情发生时可以通知它


您可以在
Powerball
上放置一个,这样它就可以通知您状态更改,或者在GUI上通知您已按下开始按钮

我想您的
while
循环将非常快地循环,不允许任何其他循环input@ScaryWombat我别无选择了吗?我是否需要在我的主方法上实现GUI?请遵循一个教程,该教程向您展示如何编写吉他,这就是为什么您有一个监听器。假设
GUI.getJButton()
返回上面提到的
start
按钮,您可以移动
System.out.println(“测试”)到侦听器。或者你可以有一个布尔变量,当按下按钮时,该变量将被设置为true。我从未想过这一点!谢谢德威尔到森林里来,注意树木;)
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;

public class PowerBallGUI {
    private JButton start = new JButton("Launch the Powerball!");
    private boolean buttonPressed = false;
    private String outText;

    /*** Constructor Methods ***/
    public PowerBallGUI() {
        @SuppressWarnings("unused")
        JTextArea outputText = new JTextArea("Press the 'Launch the Powerball' button to start!");
    }

    /*** Setters ***/
    /*** Sets the JTextArea object ***/
    public void setTextArea (String str) {
        this.outText = str;
    }

    public void setButtonPressed (Boolean bool) {
        this.buttonPressed = bool;
    }

    /*** Getters ***/
    public Boolean getButtonPressed() {
        return this.buttonPressed;
    }

    public JButton getJButton() {
        return this.start;
    }

    /*** Builds the GUI ***/
    public void buildGUI() {
        // Create the Java Frame itself
        JFrame frame = new JFrame("Can YOU win the Powerball? v1.0 (Programmed by: Josh Yang)");

        // Sets the default close operation of the frame
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Sets the size of the frame
        frame.setSize(800, 500);

        // Sets the location of the frame
        centerGUI(frame);

        // Allows the frame to be seen
        frame.setVisible(true);

        // Disables frame resizing
        //frame.setResizable(false);

        // Create the Java Panel itself
        JPanel panel = new JPanel();
        JPanel contentPanel = new JPanel();
        JPanel launchPanel = new JPanel();

        // Sets the sides of the Java panels
        panel.setSize(800, 150);

        // Set the panel background color
        panel.setBackground(Color.YELLOW);
        contentPanel.setBackground(Color.YELLOW);
        launchPanel.setBackground(Color.PINK);

        // Add the panel onto the frame
        frame.add(panel, "North");
        frame.add(contentPanel, BorderLayout.CENTER);
        frame.add(launchPanel, BorderLayout.SOUTH);

        // Set top panel's preferred size dimensions
        panel.setPreferredSize(new Dimension(800, 100));

        // Adds components onto the panel
        JLabel title = new JLabel("Can YOU win the lottery? v1.0", SwingConstants.CENTER);
        title.setFont(new Font("Serif", Font.BOLD, 25));
        panel.add(title);

        String text = "Basically, we start you off at $1000 and buy tickets in increments of $2 until you win big (if you do, that is)!";
        JLabel description = new JLabel();
        description.setText(text);
        description.setFont(new Font("Serif", Font.PLAIN, 16));
        panel.add(description);

        // ContentPanel area
        JLabel cDescription = new JLabel("Output: ");
        contentPanel.add(cDescription);

        JTextArea outputText = new JTextArea(17, 60);
        outputText.setBackground(Color.PINK);
        outputText.setEditable(false);
        outputText.setText("Press the 'Launch the Powerball' button to start!");
        contentPanel.add(outputText);


        start.setLocation(100, 100);
        launchPanel.add(start);

        // Add an action listener to the JButton
        start.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // If the button is pressed, delete text field and replace with new content
                setButtonPressed(true);
                outputText.setText("");
                outputText.setText(outText);
            }
        });



        frame.revalidate();

        //frame.pack();
    }

    /*** Centers the GUI based on screen size ***/
    public static void centerGUI(Window frame) {
        // Gets the size of the screen
        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (int) ((dimension.getWidth() - frame.getWidth()) / 2);
        int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);

        // Set the frame location based on x and y
        frame.setLocation(x, y);
    }
}
start.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // If the button is pressed, delete text field and replace with new content

        PowerBall roll = new PowerBall();
        roll.randomize();
        System.out.println(roll.toString());
        roll.calculate();
        roll.displayBalance();
        roll.displayWinnings();

        setButtonPressed(true);
        outputText.setText("");
        outputText.setText(outText);
    }
});