gpt4 book ai didi

java - JPanel 在继续之前不会等待用户输入

转载 作者:行者123 更新时间:2023-12-01 11:20:36 25 4
gpt4 key购买 nike

我正在尝试编写一个程序,在 JPanel 中执行一些相当简单的计算。要求之一是它会重复,直到用户另有说明为止。不幸的是,当 JPanel 打开时,它不会等待任何用户输入,而是直接转到下一件事(因为我已经编写了询问用户是否要继续或退出的部分,它目前处于无限长的时间内)循环,这意味着新的 JPanel 会不断打开,直到我停止程序)。我的问题是:为什么程序不等待用户按下“确定”按钮继续?

这是我的 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() 的内容以及我自己尝试(未成功)解决问题的所有内容。

预先感谢您的帮助!

最佳答案

Unfortunately when the JPanel opens it does not wait for any user input,

面板打不开。您可以将面板添加到框架或对话框中。如果您想要“打开”或“弹出”某些内容,那么您可以使用 JDialog。

SaleItem newItem = new SaleItem(...);

SaleItem 应该是一个模态 JDialog。然后,直到用户单击您创建的关闭对话框的按钮后,该对话框才会关闭。对话框的创建方式与创建 JFrame 的方式完全相同。

关于java - JPanel 在继续之前不会等待用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31272496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com