当前位置: 首页 > 知识库问答 >
问题:

等待按钮按下(在GUI中)在代码中前进

丰誉
2023-03-14

多亏了这里有用的回复,我的图形用户界面达到了我想要的效果--

这是GUI,这是添加了ActionListener的当前代码:

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

public class GUITest extends JFrame {

JButton testButton1 = new JButton("Do something");
JButton testButton2 = new JButton("Do something different");
JButton testButton3 = new JButton("Do something even more different");

 public GUITest() {

      super("Testing Title");  
      Container pane = getContentPane();  
      pane.setLayout(new BorderLayout());
      pane.add(getHeader(),BorderLayout.NORTH); 
      pane.add(getTextArea(),BorderLayout.CENTER);
      pane.add(getButtonPanel(),BorderLayout.SOUTH);

}  

 public JComponent getHeader() {  

     JPanel labelPanel = new JPanel();  
     labelPanel.setLayout(new GridLayout(1,2));  
     labelPanel.setSize(getPreferredSize());    
     JLabel labelLocal = new JLabel("Left value: ", JLabel.CENTER);  
     JLabel labelDB = new JLabel("Right value: ", JLabel.CENTER);  
     labelPanel.add(labelLocal);
     labelPanel.add(labelDB);
     return labelPanel;

  }

public JComponent getTextArea() {  

   JPanel textPanel = new JPanel();    
   textPanel.setLayout(new GridLayout(1,2,5,0));

   JTextArea testTextArea = new JTextArea();
   testTextArea.setEditable(false);
   JScrollPane sp1 = new JScrollPane(testTextArea); 

   JTextArea testTextArea2 = new JTextArea();
   JScrollPane sp2 = new JScrollPane(testTextArea2); 
   testTextArea2.setEditable(false);

   testTextArea.setText("Hello Hello Hello\nTesting!\ntesterino\ntesteroni");
   testTextArea2.setText("Hello Hello Hello\nTesting!\ntest\nABC123\ncdef123\nhijk123");

   textPanel.add(sp1);
   textPanel.add(sp2);
   return textPanel;
}

 public JComponent getButtonPanel() {

  JPanel buttonPanel = new JPanel();
  buttonPanel.setLayout(new FlowLayout());

  testButton1.addActionListener(this); 
  testButton2.addActionListener(this); 
  testButton3.addActionListener(this); 

  buttonPanel.add(testButton1);  
  buttonPanel.add(testButton2);  
  buttonPanel.add(testButton3);  
  return buttonPanel;   
}

   public void actionPerformed(ActionEvent event) {
if(event.getSource() == this.testButton1){
    System.out.println("testButton1!");
}

if(event.getSource() == this.testButton2){
    System.out.println("testButton2!");
}

if(event.getSource() == this.testButton3){
    System.out.println("testButton3!");
}
}  

public static void main(String[] args) {  

  GUITest e = new GUITest();  
  e.setVisible(true);  
  e.setMinimumSize(new Dimension(650, 200));
  e.pack();  
  e.setDefaultCloseOperation(EXIT_ON_CLOSE);  
  e.setLocationRelativeTo(null);  
  }  
}  

我读过一些关于使用JOptionPane的文章,但显然这并没有给我想要的灵活性,因为我不仅想要按钮,还想要两个标签和文本区域。

基本上,我想做的是:

//...
//other code that comes before

GUITest.openGUI();
if(button1 == pressed)
{
  //do something and hide GUI
}
else if(button2 == pressed)
{
  //do something else and hide GUI
}
//afterwards, there is more code, but it only gets executed after a button press

我希望执行停止,直到我选择按下Button1或Button2。我不想做等待(),因为这可能是糟糕的性能。

谢谢你的帮助!

共有1个答案

胡安怡
2023-03-14

我读过一些关于使用JOptionPane的文章,但显然这并没有给我想要的灵活性,因为我不仅想要按钮,还想要两个标签和文本区域。

然后你会想阅读更多关于JOptionPane的内容,因为它当然可以显示所有这些动物等等。了解JOptionPane的对象参数。showXxx(…) 方法可以将任何Swing组件作为其值。这意味着JOptionPane可以接受并显示一个JPanel,其中包含多个组件,包括其他JPanel,实际上可以包含整个复杂的GUI。例如,请查看此链接。

另一个选项是创建自己的JDialog,使其成为模态,并在其中显示停止的GUI;两者都可以。

基本上,我想做的是:

//other code that comes before
GUITest.openGUI();
if(button1 == pressed)
{
  //do something and hide GUI
}
else if(button2 == pressed)
{
  //do something else and hide GUI
}
//afterwards, there is more code, but it only gets executed after a button press

在这里,您可能会误解事件驱动程序的工作方式。这里不需要“等待”任何东西,而是需要在事件发生时做出反应,例如按钮推送。关键是使用您的侦听器对按钮推送做出反应,并根据程序的状态改变这种反应的行为。

 类似资料:
  • 我目前正在开发一个聊天程序的登录表单,希望该程序加载框架并等待用户输入。不可饶恕的是,程序打开了框架,但同时又恢复了主方法。我希望你有一些想法来帮助我。 问候语 JFrame类:

  • 问题内容: 下面的代码正确返回该单元格: 但是在表视图中查找indexpath会崩溃: 我尝试了另一种方法,但是没有成功: 问题答案: 我不知道是否有简单的方法可以做到这一点。( 编辑: 实际上有。请查看@mustafa的第二个解决方案。)一种解决方法是将按钮的标签设置为in ,然后可以仅访问按钮的标签以找出按钮所属的行。 警告: 此解决方法很脆弱。如果您允许在不调用的情况下从表中添加或删除行,则

  • 在我的程序中,它将单击浏览器中的一个按钮,并且在该页面中,应该会出现另一个按钮。出现该按钮后,我的程序将立即运行下一个操作来单击下一个按钮。我目前收到此错误: ElementNotVisibleException:消息:元素不可见 因此,我假设我正在调用该操作,以便在该按钮出现之前单击下一个按钮。我的问题是,我该怎么做才能让我的程序等到我可以点击按钮,再点击按钮? 这就是我的程序底部的代码的样子。

  • 我等待用户按下两个是或否按钮中的一个。在这些回调中,我将变量分别更新为或。 当我执行MATLAB GUI时,我必须按两次YES按钮才能使值生效。有什么提示/提示可以克服这个问题吗?

  • 我无法弄清楚每三个条目的like按钮是如何以及为什么被按下的,从我实际按下的like按钮开始,但(幸运的是)只有一个,而且也调用了正确的API。 请帮忙。

  • 问题内容: 我希望我的应用程序中的按钮样式在按下时可以更改。做这个的最好方式是什么? 问题答案: 使用。 这里是一个例子: