Java SWING的JFrames中来自WindowsForms的DialogResult属性的等价物是什么?

时间:2017-12-21 16:15:56

标签: java swing dialog jframe

我正在使用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中执行此操作的标准方法是什么?

2 个答案:

答案 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();