在继续

时间:2015-07-07 15:08:44

标签: java swing

我试图制作一个程序,在JPanel中进行一些相当简单的计算。其中一个要求是重复使用,直到用户另有说明为止。不幸的是,当JPanel打开时,它不会等待任何用户输入,而是直接进入下一个事情(因为我还写了询问用户是否要继续或退出的部分,它目前是在一个无限的while循环中,这意味着新的JPanels会一直持续打开直到我停止程序)。我的问题是:为什么程序没有等到用户按下Okay按钮继续前进?

这是我的主要():

public class Driver extends JFrame{

public static void main(String args[]){


    do{
        new GUI();
        while (!GUI.isButtonPressed()){

        }
        //int choice = JOptionPane.showConfirmDialog(null, "Default tax rate is 7.5%\nDefault discount rate is 10%.\nKeep these default values?", "Choose an Option", JOptionPane.YES_NO_OPTION);
        //switch (choice){
            //case JOptionPane.YES_OPTION: {
                //SaleItem newItem = new SaleItem();
                //break;
            //}
            //case JOptionPane.NO_OPTION: {
                //new GUI();
                //break;
            //}
        //}
    }while(true);
}

这是我的GUI:

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



public class GUI extends JFrame {
    JPanel panel;
    JLabel priceLabel;
    JLabel discountLabel;
    JLabel taxLabel;
    JTextField taxTextField;
    JTextField priceTextField;
    JTextField discountTextField;
    JButton okayButton;
    JButton defaultsButton;
    final int WINDOW_WIDTH = 300;
    final int WINDOW_HEIGHT = 250;
    boolean buttonPressed = false;

    public boolean isButtonPressed() {
        return buttonPressed;
    }

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

    public GUI(){
        super("Item Properties");
        setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        buildPanel();
        add(panel);
        setVisible(true);
    }

    private void buildPanel(){
        priceLabel = new JLabel("Enter the item price:");
        priceTextField = new JTextField(10);

        discountTextField = new JTextField(10);
        discountLabel = new JLabel("Enter the discount percent:");

        taxLabel = new JLabel("Enter the tax percent:");
        taxTextField = new JTextField(10);

        okayButton = new JButton("Okay");
        okayButton.addActionListener(new ButtonListener());

        defaultsButton = new JButton("Use Defaults");
        defaultsButton.addActionListener(new ButtonListener());

        panel = new JPanel();

        panel.add(priceLabel);
        panel.add(priceTextField);
        panel.add(discountLabel);
        panel.add(discountTextField);
        panel.add(taxLabel);
        panel.add(taxTextField);

        panel.add(okayButton);
        panel.add(defaultsButton);
    }

    private class ButtonListener implements ActionListener {
        private boolean buttonPressed = false;

        public void actionPerformed(ActionEvent event){
            GUI.setButtonPressed(true);
            SaleItem newItem = new SaleItem(Double.parseDouble(priceTextField.getText()), Double.parseDouble(discountTextField.getText()), Double.parseDouble(taxTextField.getText()));
    }
}

有关getButtonPressed()和isButtonPressed()的内容以及我尝试(不成功)自己解决问题的所有内容。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  

不幸的是,当JPanel打开时,它不会等待任何用户输入,

小组不开放。您将面板添加到框架或对话框。如果你想要点什么,打开"或者" popup"然后你使用JDialog。

SaleItem newItem = new SaleItem(...);

SaleItem应为modal JDialog。然后,在用户单击您创建的按钮以关闭对话框之前,对话框不会关闭。创建对话框的方式与创建JFrame的方式完全相同。