Java swing,更改Java swing窗口,但出现空白屏幕。当分别运行每个程序时,每个程序都可以正常运行

时间:2019-02-13 16:52:15

标签: java swing

我正在使用Java swing设计Java中的登录屏幕和主菜单屏幕。我遇到的问题是登录正确时,已经在设计主菜单时出现了空白的Java摆动窗口。

我刚开始学习Java,所以我对它不了解。

我自己设计框架,这意味着我没有使用GUI界面,所有按钮和文本框都是手动完成的。

这是登录代码。

package loginapp;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Login_App extends JFrame {

    public static void main(String[] args) {


JFrame frame = new JFrame("Mo Garage Login");
        //frame setup
        frame.setSize(500, 600);
        frame.setVisible(true);

        //Label and Text boxes

        JLabel usernamelbl = new JLabel("Username");
        usernamelbl.setBounds(100,100, 100,20);
        frame.add(usernamelbl);
        frame.setLayout(null);
        frame.setVisible(true);


        JLabel passwordlbl = new JLabel("Password");
        passwordlbl.setBounds(100,200,100,20);
        frame.add(passwordlbl);
        frame.setLayout(null);
        frame.setVisible(true);



        JTextField username = new JTextField();
        username.setBounds(200,100,100,20);
        frame.add(username);
        frame.setLayout(null);//using no layout managers 
        frame.setVisible(true);



        JPasswordField pass = new JPasswordField();
        pass.setBounds(200,200,100,20);
        frame.add(pass);
        frame.setLayout(null);
        frame.setVisible(true);



        //Buttons

        JButton log=new JButton("Login");
        log.setBounds(200,500,100,40);

        frame.add(log);
        frame.setLayout(null);//using no layout managers  
        frame.setVisible(true);
        //login button action
        log.addActionListener(new ActionListener() {
        public void actionPerformed (ActionEvent arg0) {

            String uname=username.getText();
            String passwd=pass.getText();

            if (uname.equals("") && passwd.equals(""))
            {
                JOptionPane.showMessageDialog(frame, "Login Successfull");

                MainMenu mainmenu =new MainMenu();

                mainmenu.setVisible(true);

                frame.setVisible(false);

            }
            else {
                JOptionPane.showMessageDialog(frame, "Incorrect Credentials");
            }


        }
        }
    );

        JButton clear=new JButton("Clear");
        clear.setBounds(50,500,100,40);

        frame.add(clear);
        frame.setLayout(null);
        frame.setVisible(true);
        //clear button action

        clear.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent arg0) {

                username.setText("");
                pass.setText("");

            }
        }
        );

    }


}

这是我的主菜单代码。

package loginapp;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


public class MainMenu extends JFrame {

    public static void main(String[] args) {
    JFrame frame= new JFrame("Main Menu");
    frame.setSize(500,600);
    frame.setVisible(true);

    JButton client= new JButton("Add new Client");
    client.setBounds(200,100,120,30);
    frame.add(client);
    frame.setLayout(null);
    frame.setVisible(true);

    JButton Mod= new JButton("Update Database");
    Mod.setBounds(190,200,140,30);
    frame.add(Mod);
    frame.setLayout(null);
    frame.setVisible(true);

    JButton info= new JButton("Information");
    info.setBounds(200,300,120,30);
    frame.add(info);
    frame.setLayout(null);
    frame.setVisible(true);

    JButton exit= new JButton("Quit");
    exit.setBounds(200,400,120,30);
    frame.add(exit);
    frame.setLayout(null);
    frame.setVisible(true);
}
}

我尝试了不同的方法,但找不到。请帮助。 谢谢。

3 个答案:

答案 0 :(得分:0)

在您的Login_App类的actionPerformed()方法中,您像这样调用类MainMenu的构造函数...

MainMenu mainmenu =new MainMenu();

但是,类MainMenu没有构造函数-至少在您发布的代码中没有。您可以在类main()的方法MainMenu中构建GUI。因此,我建议最简单的解决方案-基于您发布的代码-将更改类actionPerformed()的方法Login_App中的代码。将上面显示的行替换为...

MainMenu.main(new String[]{});

答案 1 :(得分:0)

尽管每个评论都是绝对正确和有用的,但您的建议却毫无用处! 您的建议是将Component添加到MainMenu对象。 因此,简而言之,请复制mainMainMenu的孔代码,并将其放入另一个方法中,我们称之为public void go(),并替换行:-

JFrame frame= new JFrame("Main Menu");

使用

this.setTitle("MainMenue");

,然后用关键字frame替换对象this的所有引用。

答案 2 :(得分:-1)

尝试在为登录执行的actionPerformed开头调用方法revalidate()。重新加载框架。