首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java JInternalFrame

Java JInternalFrame
EN

Stack Overflow用户
提问于 2014-10-02 14:12:33
回答 1查看 235关注 0票数 0

我正在制作一个程序,我不知道如何使它工作:我有一个mainFrame:

代码语言:javascript
复制
package itneizapenoitseg;

public class mainFrame extends JFrame {

    private dbconnection database = new dbconnection(); // DB connetion data (login , passw ..)
    private JDesktopPane desktop = new JDesktopPane(); // Need this to make Frame inside Frame

    public mainFrame() {
        super("");
        setLayout(null);
        setSize(850, 700);
        setLocation(500, 280);
        Login login = new Login(database);// I want to perform a login
        desktop.add(login);
        try {
            login.setSelected(true);
        }
        catch (Exception e) {
            // TODO: handle exception
        }
        setContentPane(desktop);
        /////////////////////////////////////////

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);

    }

    public static void main(String [] args) {
        new mainFrame();
    }
}

登录类:

代码语言:javascript
复制
package itneizapenoitseg;

import... //

public class Login extends JInternalFrame {

    // User and password fields
    JTextField usernameForm = new JTextField(15);
    JPasswordField passwordForm = new JPasswordField(15);
    JButton login = new JButton("Login");

    public Login(dbconnection database) {

        super("Login", true, true, true, true);

        setSize(300, 200);

        // The login panel
        JPanel panel = new JPanel();
        panel.setLayout(null);
        JLabel username = new JLabel("username :");
        JLabel password = new JLabel("password :");

        // Position
        username.setBounds(70, 10, 80, 11);
        password.setBounds(70, 55, 80, 17);
        usernameForm.setBounds(70, 30, 150, 20);
        passwordForm.setBounds(70, 75, 150, 20);
        login.setBounds(105, 100, 80, 20);

        // Addings elements to display panel
        panel.add(usernameForm);
        panel.add(passwordForm);
        panel.add(login);
        panel.add(password);
        panel.add(username);
        getContentPane().add(panel);

        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);// Doens't work
        setVisible(true);
        actionLogin(database);
    }

    // When pressing Login button...

    private void actionLogin(dbconnection database) {
        login.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                //TODO Have to change to MySql query
                String usname = usernameForm.getText();
                String passw = new String(passwordForm.getPassword());

                // Checking credencial
                if(usname.equals("test") && passw.equals("1234")){
                    // Here i want to call a mainFrame funcion (createGUI)
                    dispose();Destroy this panel
                } else{
                    JOptionPane.showMessageDialog(null, "Username or password wrong!");
                    usernameForm.setText("");
                    passwordForm.setText("");
                    usernameForm.requestFocus();
                }
            }
        });

    }
}  

我希望当有人成功登录时,会调用大型机的函数createGui或通知mainFrame的方法。我的意图是使mainFrame成为空,直到某些人成功登录和下一次显示它的内容。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-02 14:54:51

非常类似于this SO question

你可以叫((mainFrame) SwingUtilities.getWindowAncestor((Component)(e.getSource()))).createGUI();

希望这能有所帮助。

编辑:我刚刚测试的一个例子:

代码语言:javascript
复制
private void setHandlers() {
    jButton2.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            ((mainFrame) SwingUtilities.getWindowAncestor((Component)(e.getSource()))).showAlert();
        }
    });
}
public void showAlert() {
    JOptionPane.showConfirmDialog(this, "Confirming !!");
}

还有另一种选择(使用频率较低--至少我是这样):

代码语言:javascript
复制
((mainFrame) SwingUtilities.getAncestorOfClass(mainFrame.class, ((Component)(e.getSource())))).createGUI();

重新编辑:您也可以尝试:

代码语言:javascript
复制
((mainFrame) ((JComponent) (e.getSource())).getTopLevelAncestor()).createGUI();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26162752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档