Java:在从第二帧检索数据时等待第一帧,然后在关闭按钮时点击,控制也进入第一帧

时间:2012-03-24 08:33:01

标签: java swing awt

在我的应用程序中有两个框架。在主框架中有“服务器”按钮。当我点击“服务器”按钮时,第二帧将打开,输入一些细节后,当我点击第二帧的“提交”按钮时,此帧将关闭并再次控制转到“服务器”按钮,我称这个帧为我将完成剩下的任务。 在我的应用程序中,当第二帧打开时,我想要的另一件事就是第一帧没有活动。

我的第一帧是: 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. 我如何关闭第二帧(点击提交按钮后),框架将关闭,控制将转到第一帧的“服务器”按钮。

1 个答案:

答案 0 :(得分:3)

1)In my application two frame is there

请勿使用两个JFrames,这不可能不使用(JNI or JNA),这些容器不会实现parent,有困难工作移动一个JFrame toFront() / toBack() /真实FocusRecycle是一个残忍的笑话

2)使用JDialogsetModalModalityType

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

4)JFrame / JDialog / JWindow没有实现finalize(),如果您要求setVisible(false)dispose()

,则无关紧要