如何在Java中等待按钮按下
我有一个JFrame,其中有一个JTextField和一个JButton。我希望它的行为类似于JOptionPane.showInputDialog()。基本上,我想构造它,然后调用.start()或使其可见的东西,然后等待按下按钮,然后返回JTextField的内容。我听说wait()/notify()可能会这样做,但我不知道这是否正确,如果正确,我可以看一个如何使用它的简短示例吗?另外,JDialog是定制输入对话框的解决方案,有一个库可以帮助您加快开发速度。它被称为TaskDailog如何在Java中等待按钮按下,java,swing,jbutton,wait,notify,Java,Swing,Jbutton,Wait,Notify,我有一个JFrame,其中有一个JTextField和一个JButton。我希望它的行为类似于JOptionPane.showInputDialog()。基本上,我想构造它,然后调用.start()或使其可见的东西,然后等待按下按钮,然后返回JTextField的内容。我听说wait()/notify()可能会这样做,但我不知道这是否正确,如果正确,我可以看一个如何使用它的简短示例吗?另外,JDialog是定制输入对话框的解决方案,有一个库可以帮助您加快开发速度。它被称为TaskDailog 有
有关详细信息,请参见这里的使用
JDialog
尝试此代码示例:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DialogExample extends JFrame
{
private JLabel nameLabel;
public DialogExample()
{
super("Dialog Example");
}
private void createAndDisplayGUI()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = new JPanel();
nameLabel = new JLabel();
contentPane.add(nameLabel);
setContentPane(contentPane);
setSize(200, 100);
setLocationByPlatform(true);
setVisible(true);
MyDialog dialog = new MyDialog(this, "Credentials : ", true);
dialog.createAndDisplayGUI();
}
public void setName(String name)
{
if (name.length() > 0)
nameLabel.setText(name);
else
nameLabel.setText("Empty string received.");
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new DialogExample().createAndDisplayGUI();
}
});
}
}
class MyDialog extends JDialog
{
private JTextField nameField;
private JFrame frame;
public MyDialog(JFrame f
, String title, boolean isModal)
{
super(f, title, isModal);
frame = f;
}
public void createAndDisplayGUI()
{
JPanel contentPane = new JPanel();
contentPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
JLabel nameLabel = new JLabel("Please Enter your Name : ");
nameField = new JTextField(10);
JButton submitButton = new JButton("SUBMIT");
submitButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
if (nameField.getDocument().getLength() > 0)
frame.setName(nameField.getText());
else
frame.setName("");
MyDialog.this.dispose();
}
});
contentPane.add(nameLabel);
contentPane.add(nameField);
contentPane.add(submitButton);
add(contentPane);
pack();
setVisible(true);
}
}
为什么不使用
JDialog
来代替JOptionPane
?听起来它可能会起作用。JDialog是否可以包含比JOptonPane更多的信息(这样它就可以取代JFrame?)实际上它们的功能相同,似乎你真的不知道除了向用户显示默认对话框窗口之外,JOptionPane
还能做什么。您可以操纵JOptionPane
,以显示您需要的内容。下面是一个关于,也来看看这个的例子:-)请看一下JButton
(名称为“HIGHLIGHT TEXT”)actionPerformed(…)
方法,看看这一行的第二个参数int selection=JOptionPane.showConfirmDialog(frame,getOptionPanel(),“HIGHLIGHT color:”,JOptionPane.OK\u取消选项,JOptionPane.PLAIN\u消息)
,这可以给你一个想法,这意味着你可以添加你自己的JPanel
,把你想放的任何东西放到JPanel
中,并使用相同的JOptionPane
满足你的特定需求:-)这几乎就是我正在研究的解决方案。你可能救了我半个小时。谢谢,非常欢迎你,保持微笑:-)。很高兴知道我的回答确实对您有所帮助:-)不过有一件事-我能让它像JOptionPane.showInputDialog那样返回它的值吗,在这里它不需要在帧上回叫?是的,没错,只需更改Submit JButton的actionPerformed(…)
方法中的逻辑即可,或者,您可以采用我的评论中所示的方法,使用JOptionPane
,方式与JDialog
(在某种意义上)相同:-)