我正在使用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);
}
}
我尝试了不同的方法,但找不到。请帮助。 谢谢。
答案 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
对象。
因此,简而言之,请复制main
中MainMenu
的孔代码,并将其放入另一个方法中,我们称之为public void go()
,并替换行:-
JFrame frame= new JFrame("Main Menu");
使用
this.setTitle("MainMenue");
,然后用关键字frame
替换对象this
的所有引用。
答案 2 :(得分:-1)
尝试在为登录执行的actionPerformed开头调用方法revalidate()。重新加载框架。