簡體   English   中英

JPanel在繼續操作之前不會等待用戶輸入

[英]JPanel doesn't wait for user input before moving on

我正在嘗試制作一個程序,它將在JPanel中執行一些相當簡單的計算。 要求之一是重復進行直到用戶說不出來為止。 不幸的是,當JPanel打開時,它不等待任何用戶輸入,而是直接移至下一件事(因為我已經編寫了詢問用戶是否要繼續或退出的部分,它目前處於無限狀態循環,這意味着新的JPanels會一直保持打開狀態,直到我停止程序為止)。 我的問題是:為什么程序沒有等到用戶按下“確定”按鈕繼續前進?

這是我的main():

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()的東西以及所有我試圖(但不成功)自己解決的問題。

在此先感謝您的幫助!

不幸的是,當JPanel打開時,它不會等待任何用戶輸入,

面板無法打開。 您將面板添加到框架或對話框。 如果您希望“打開”或“彈出”某些內容,請使用JDialog。

SaleItem newItem = new SaleItem(...);

SaleItem應該是modal JDialog 然后,對話框將關閉,直到用戶單擊您創建的按鈕以關閉對話框。 創建對話框的方式與創建JFrame完全相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM