Swing &引用;事件类型“;在爪哇

Swing &引用;事件类型“;在爪哇,swing,events,user-interface,java,Swing,Events,User Interface,Java,我的程序包含两个类,一个代表主程序,另一个是使用swing实现的gui 我正在尝试创建一个“事件类型”,这意味着我希望我的主程序等到用户界面(GUI)指示某个事件,比如按下按钮,并且我希望在按下按钮时发送一些信息 主程序的通用代码(这是相关部分) GUI的代码(同样仅限于相关部分) 最好我想使用一些图书馆,有适合我需要的吗? (可能是巴士事件?) 编辑以指定问题(感谢Kishan Sarsecha Gajjar) 我希望第一个类(常规类)输入wait语句,我知道如何使用以下命令等待: while

我的程序包含两个类,一个代表主程序,另一个是使用swing实现的gui

我正在尝试创建一个“事件类型”,这意味着我希望我的主程序等到用户界面(GUI)指示某个事件,比如按下按钮,并且我希望在按下按钮时发送一些信息

主程序的通用代码(这是相关部分)

GUI的代码(同样仅限于相关部分)

最好我想使用一些图书馆,有适合我需要的吗? (可能是巴士事件?)

编辑以指定问题(感谢Kishan Sarsecha Gajjar)

我希望第一个类(常规类)输入wait语句,我知道如何使用以下命令等待:

while( someBoolean...)
Thread.sleep(...)
我可以通过GUI类中的句柄更改一些布尔值,如:

FisrtClass.someBoolean == False
但是我想要更好更整洁的东西,比如一个实现sleep语句的库。而且不需要额外的代码。有这样的事吗? 我看过GoogleBusEvent库,但我不确定它是否兼容

编辑、添加JDialog

更新代码:主程序:

Bid returnedBid = requestBid;
// Open window GUI with the requested BID and wait for confirmation

DialogHumanConfirmManual nextWindowGUI = new DialogHumanConfirmManual(requestBid);

// Wait on event
if ( (returnedBid = nextWindowGUI.getAnswer()) != null ){
System.out.println("Got Bid " + returnedBid.print());
}
GUI-对话框:

public DialogHumanConfirmManual(Bid requestedBid){

    currentBid = requestedBid;
    currentBid.approvedHuman = false;
    Dialog mainFrame = new Dialog(new Frame());

    myPanel = new JPanel();
    getContentPane().add(myPanel);
    myPanel.add(new JLabel("Confirmation Dialog"));

    yesButton = new JButton("Confirm");
    yesButton.addActionListener(this);
    myPanel.add(yesButton); 

    noButton = new JButton("No");
    noButton.addActionListener(this);
    myPanel.add(noButton);

    pack();
    setVisible(true);       


}

public void actionPerformed(ActionEvent e) {

    if (yesButton == e.getSource()) {
        currentBid.approvedHuman = true;
        answeredBid = currentBid;

    }


}
打开对话框后,调用if(returnBid),这会导致代码中出现空指针异常,因此如何延迟主程序,直到用户确认请求

另一个是使用swing实现的gui

使用
模态JDialog
而不是JFrame

一旦对话框变为可见,setVisible(true)语句之后的代码将不会执行,直到对话框关闭

有关更多信息,请阅读上的Swing教程部分。本教程介绍了JOptionPane类,但您可以只使用JDialog,它的创建方式与JFrame完全相同。您可以根据具体需求选择是使用JOptionPane还是JDialog

另一个是使用swing实现的gui

使用
模态JDialog
而不是JFrame

一旦对话框变为可见,setVisible(true)语句之后的代码将不会执行,直到对话框关闭

有关更多信息,请阅读上的Swing教程部分。本教程介绍了JOptionPane类,但您可以只使用JDialog,它的创建方式与JFrame完全相同。您可以根据具体需求选择是使用JOptionPane还是JDialog

另一个是使用swing实现的gui

使用
模态JDialog
而不是JFrame

一旦对话框变为可见,setVisible(true)语句之后的代码将不会执行,直到对话框关闭

有关更多信息,请阅读上的Swing教程部分。本教程介绍了JOptionPane类,但您可以只使用JDialog,它的创建方式与JFrame完全相同。您可以根据具体需求选择是使用JOptionPane还是JDialog

另一个是使用swing实现的gui

使用
模态JDialog
而不是JFrame

一旦对话框变为可见,setVisible(true)语句之后的代码将不会执行,直到对话框关闭


有关更多信息,请阅读上的Swing教程部分。本教程介绍了JOptionPane类,但您可以只使用JDialog,它的创建方式与JFrame完全相同。您可以根据自己的具体要求选择使用JOptionPane还是JDialog。

标记:问题太广泛了……针对您的具体情况,最好的解决方案是使用模态JDialog,正如camickr在回答中所指出的那样(1+),或者如果您坚决反对使用它,您可能应该证明您的推理是正确的,然后使用多个侦听器/观察者接口中的任意一个。后者可以通过PropertyChangeSupport实现——请注意,这在Swing组件中已经是固有的,甚至允许外部类将ActionListener添加到键JButton中。同样,我支持camickr的答案,但在不同的情况下使用了这两种方法。例如,按下Jdialog的OK按钮将触发邮件程序只需等待的事件,当事件被触发时,主程序将继续延迟:问题太广泛…针对您的具体情况,最好的解决方案是使用模态Jdialog,正如camickr在其回答中指出的(1+给他),或者,如果您坚决反对使用它——您可能应该证明您的推理是正确的,那么可以使用多种侦听器/观察者接口中的任意一种。后者可以通过PropertyChangeSupport实现——请注意,这在Swing组件中已经是固有的,甚至允许外部类将ActionListener添加到键JButton中。同样,我支持camickr的答案,但在不同的情况下使用了这两种方法。例如,按下Jdialog的OK按钮将触发邮件程序只需等待的事件,当事件被触发时,主程序将继续延迟:问题太广泛…针对您的具体情况,最好的解决方案是使用模态Jdialog,正如camickr在其回答中指出的(1+给他),或者,如果您坚决反对使用它——您可能应该证明您的推理是正确的,那么可以使用多种侦听器/观察者接口中的任意一种。后者可以通过PropertyChangeSupport实现——请注意,这在Swing组件中已经是固有的,甚至允许外部类将ActionListener添加到键JButton中。同样,我支持camickr的答案,但在不同的情况下使用了这两种方法。例如,按下Jdialog的OK按钮将触发一个事件,该事件会导致邮件
Bid returnedBid = requestBid;
// Open window GUI with the requested BID and wait for confirmation

DialogHumanConfirmManual nextWindowGUI = new DialogHumanConfirmManual(requestBid);

// Wait on event
if ( (returnedBid = nextWindowGUI.getAnswer()) != null ){
System.out.println("Got Bid " + returnedBid.print());
}
public DialogHumanConfirmManual(Bid requestedBid){

    currentBid = requestedBid;
    currentBid.approvedHuman = false;
    Dialog mainFrame = new Dialog(new Frame());

    myPanel = new JPanel();
    getContentPane().add(myPanel);
    myPanel.add(new JLabel("Confirmation Dialog"));

    yesButton = new JButton("Confirm");
    yesButton.addActionListener(this);
    myPanel.add(yesButton); 

    noButton = new JButton("No");
    noButton.addActionListener(this);
    myPanel.add(noButton);

    pack();
    setVisible(true);       


}

public void actionPerformed(ActionEvent e) {

    if (yesButton == e.getSource()) {
        currentBid.approvedHuman = true;
        answeredBid = currentBid;

    }


}