【问题标题】:Java: wait first frame while retrieving data from second frame then on hitting on close button and control also come to the first frameJava:等待第一帧,同时从第二帧检索数据,然后点击关闭按钮,控制也进入第一帧
【发布时间】:2012-03-24 08:33:00
【问题描述】:

在我的应用程序中有两个框架。在主框架中的“服务器”按钮在那里。当我单击“服务器”按钮时,第二个框架将打开,当我单击第二个框架上的“提交”按钮时输入一些详细信息后,该框架将关闭并再次控制转到我调用此框架的“服务器”按钮,所以我将完成剩下的任务。 当第二帧打开然后第一帧没有活动时,我希望在我的应用程序中再做一件事。

我的第一个框架是:JFrame框架;

在这个框架中有一个服务器按钮:JButton btnSaveOnServer;

在这个按钮的 addActionListener 中,我写了这段代码来打开第二帧:

btnSaveOnServer.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                    ServerClass window = new ServerClass();
                    window.serverFrame.setVisible(true);
            }
        });

第二帧代码:

public class ServerClass{
public JFrame serverFrame;
private JLabel userName;
private JLabel password;
private JTextField textUsername;
private JPasswordField textPassword;
private JButton btnOk;
protected ServerClass(){
try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

        serverFrame = new JFrame("Server Entry Token");

        serverFrame.setBounds(500, 280, 335, 250);
        serverFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        serverFrame.getContentPane().setLayout(null);

        font = new Font("Arial", Font.BOLD, 15);

        userName = new JLabel("Username");
        userName.setBounds(4, 40, 100, 15);
        userName.setFont(font);

        password = new JLabel("PassKey");
        password.setBounds(4, 69, 100, 15);
        password.setFont(font);

        textUsername = new JTextField();
        textUsername.setBounds(110, 35, 200, 25);
        textUsername.setFont(font);


        textPassword = new JPasswordField(10);
        textPassword.setBounds(110, 65, 200, 25);
        textPassword.setEchoChar(ch);

        btnOk = new JButton("Submit");
        btnOk.setBounds(30, 170, 85, 25);

        serverFrame.add(userName);
        serverFrame.add(password);
        serverFrame.add(textUsername);
        serverFrame.add(textPassword);
        serverFrame.add(btnOk);

        btnOk.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                if (!textUsername.getText().equals("")
                        && !textPassword.getText().equals("")) {

                    tArea.append("Username:\t"+textUsername.getText()+"\n");
                    tArea.append("Pass:\t"+textPassword.getText()+"\n");
//tArea is the area in first frame where I display the entered data.
            serverFrame.dispose();      
                }

            }
        });
}

}

这里我在“提交”按钮中添加代码 serverFrame.dispose(); 关闭框架但控制不到达第一帧。 所以我的问题是:

  1. 如何在第二个框架打开时禁用或停用我的第一个框架。
  2. 在我的代码中,我在第一帧的“服务器”按钮中调用第二帧。这是将第二帧调用到第一帧的写入方式吗?
  3. 我如何关闭第二个框架(单击提交按钮后),这样框架将关闭并且控制将转到第一框架的“服务器”按钮。

【问题讨论】:

    标签: java swing awt


    【解决方案1】:

    1) In my application two frame is there

    不要使用两个JFrames,不使用(JNI or JNA)是不可能的,这些容器没有实现parent,很难移动一个JFrametoFront()/@987654331 @/真实FocusRecycle是残酷的玩笑

    2) 使用JDialog,与setModalModalityType

    3) 普通香草JOptionPane 是最好的方法,

    4) JFrame / JDialog / JWindow 没有实现finalize(),那么无论你调用setVisible(false) 还是dispose() 都没关系

    【讨论】:

    • 实际上我想在第二帧中获取用户名、密码、IPAddress 和端口号。那么有可能以这种方式显示 JDialog。
    • 正确的 JOptionPane 可以将其作为值或值数组返回 rest here
    • @Andrew Thompson 谢谢我找不到这个好答案,顺便说一句,这张照片与我昨晚之后的 Xxx 相对应,嗯,不,不,这只动物看起来比我更聪明......
    猜你喜欢
    • 1970-01-01
    • 2016-05-31
    • 2023-04-11
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多