我正在使用Java Swing库编写Java应用程序,并且正在寻找与使用WindowsForms的C#代码相同的功能:
MyDialog form = new MyDialog();
form.showDialog();
if (form.DialogResult == DialogResult.OK)
doSomething();
我无法在Java中找到JFrames的等效功能。
我正在处理的代码如下:
LoginFrame loginFrame = new LoginFrame(CONTROLLER);
loginFrame.setVisible(true);
前两行代码启动一个登录窗口,用户可以在其中输入他的电子邮件和密码。所述窗口显示2个按钮:OK和CANCEL。窗口关闭后,我很想知道用户按下了哪两个按钮。
使用JFrames在Java Swing中执行此操作的标准方法是什么?
答案 0 :(得分:1)
应用程序将有一个JFrame作为主窗口。
如果您需要子窗口,您将使用JDialog。 JDialog就像一个JFrame。您需要编写所有逻辑代码并自己处理所有按钮事件
JOptionPane
是预先打包的JDialog
,可为您提供一些默认功能。
您可以使用多个输入字段创建一个简单的JOptionPane,代码类似于:
JTextField firstName = new JTextField(10);
//firstName.addAncestorListener( new RequestFocusListener() );
JTextField lastName = new JTextField(10);
Object[] msg = {"First Name:", firstName, "Last Name:", lastName};
int result = JOptionPane.showConfirmDialog(
frame,
msg,
"Enter Name",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.PLAIN_MESSAGE);
if (result == JOptionPane.YES_OPTION)
{
System.out.println(firstName.getText() + " : " + lastName.getText());
}
else
{
System.out.println("Canceled");
}
上述问题之一是焦点将放在按钮上,而不是文本字段上。您可以使用Request Focus Listener
解决此问题如果您不喜欢选项窗格中组件的布局,则需要使用组件创建自定义面板,并将面板添加到OptionPane。
您还应该查看Making Dialogs上Swing教程中的部分。本节和教程是通用的,将为您提供从C#过渡的基础知识。
答案 1 :(得分:0)
您可以将ActionListener设置为按钮。有很多方法。
匿名动作侦听器
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
if(e.getSource() == button1) {
//if clicks the first button
} else if (e.getSource() == button2) {
//if clicks the second button
}
}
});
实施动作侦听器的类(维护问题的最佳选择)
class CheckButtonActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent actionEvent) {
if(e.getSource() == button1) {
//if clicks the first button
} else if (e.getSource() == button2) {
//if clicks the second button
}
}
}
并将类设置为JButton:
CheckButtonActionListener checker = new CheckButtonActionListener();
button.addActionListener(checker);
或:
button1.addActionListener(new CheckButtonActionListener();