我想为学校创建这个小应用程序,它自动计算你需要通过的等级。提出了两个类,框架类,基本上包含jframe和菜单栏,以及登录类(显然)处理登录表单。
现在当我点击菜单中的登录按钮时,我想要一个新窗口弹出并显示登录表单,然后继续加载成绩。 我不知道我怎么能做到这一点,到目前为止我所尝试的一切都失败了。
我该怎么做?
课程Login
的代码:
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class Login {
public static void placeComponents(JPanel panel) {
panel.setLayout(null);
JLabel userLabel = new JLabel("Username: ");
userLabel.setBounds(100, 10, 80, 25);
panel.add(userLabel);
JTextField userText = new JTextField(20);
userText.setBounds(100, 10, 160, 25);
panel.add(userText);
JLabel passwordLabel = new JLabel("Password: ");
passwordLabel.setBounds(10, 40, 80, 25);
panel.add(passwordLabel);
JPasswordField passwordText = new JPasswordField(20);
passwordText.setBounds(100, 40, 160, 25);
panel.add(passwordText);
JButton loginButton = new JButton("Login");
loginButton.setBounds(10, 80, 80, 25);
panel.add(loginButton);
}
}
我Frame
课程的代码:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
@SuppressWarnings("serial")
public class Frame extends JFrame {
Login login = new Login();
public Frame() {
setTitle("Grade calculation");
setSize(300, 300);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu fileMenu = new JMenu("File");
JMenu editMenu = new JMenu("Edit");
menuBar.add(fileMenu);
menuBar.add(editMenu);
JMenuItem loginAction = new JMenuItem("Log in");
JMenuItem exitAction = new JMenuItem("Close");
JMenuItem cutAction = new JMenuItem("Cut");
JMenuItem copyAction = new JMenuItem("Copy");
JMenuItem pasteAction = new JMenuItem("Paste");
JCheckBoxMenuItem checkAction = new JCheckBoxMenuItem("Inloggegevens onthouden");
fileMenu.add(loginAction);
fileMenu.add(checkAction);
fileMenu.add(exitAction);
editMenu.add(cutAction);
editMenu.add(copyAction);
editMenu.add(pasteAction);
loginAction.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
exitAction.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
}
public static void main(String[] args) {
Frame me = new Frame();
me.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
me.setResizable(false);
me.setLocationRelativeTo(null);
me.setVisible(true);
}
}
答案 0 :(得分:1)
您可以在Java Swing中使用弹出窗口,查看一些信息here。
这是上面链接的第一个例子,只是创建一个简单的消息对话窗口。
//default title and icon
JOptionPane.showMessageDialog(frame,
"Eggs are not supposed to be green.");
您可以在弹出窗口中输入所需的任何输入字段。
答案 1 :(得分:0)
这是一个示例,可能会指出您正确的方向而不做太多的项目。我不会将我的GUI分成多个类,以防止你的框架失去对其内部发生的事情的控制,以及其他一些原因。您可能还想为数据创建另一个类。如果您只是想在新框架中显示登录详细信息和成绩,那么您可以轻松地创建另一个扩展JFrame的类。
代码:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
@SuppressWarnings("serial")
public class Frame extends JFrame implements ActionListener{
private JMenuItem loginAction; //defined here to allow access in actionPerformed().
private JMenuItem exitAction;
private JButton loginButton;
public Frame() {
setTitle("Grade calculation");
setSize(300, 300);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu fileMenu = new JMenu("File");
JMenu editMenu = new JMenu("Edit");
menuBar.add(fileMenu);
menuBar.add(editMenu);
loginAction = new JMenuItem("Log in");
exitAction = new JMenuItem("Close");
JMenuItem cutAction = new JMenuItem("Cut");
JMenuItem copyAction = new JMenuItem("Copy");
JMenuItem pasteAction = new JMenuItem("Paste");
JCheckBoxMenuItem checkAction = new JCheckBoxMenuItem("Inloggegevens onthouden");
fileMenu.add(loginAction);
fileMenu.add(checkAction);
fileMenu.add(exitAction);
editMenu.add(cutAction);
editMenu.add(copyAction);
editMenu.add(pasteAction);
loginAction.addActionListener(this);
exitAction.addActionListener(this);
}
public JPanel loginPanel()
{
JPanel panel = new JPanel();
panel.setLayout(null);
JLabel userLabel = new JLabel("Username: ");
userLabel.setBounds(10, 10, 80, 25);
panel.add(userLabel);
JTextField userText = new JTextField(20);
userText.setBounds(100, 10, 160, 25);
panel.add(userText);
JLabel passwordLabel = new JLabel("Password: ");
passwordLabel.setBounds(10, 40, 80, 25);
panel.add(passwordLabel);
JPasswordField passwordText = new JPasswordField(20);
passwordText.setBounds(100, 40, 160, 25);
panel.add(passwordText);
loginButton = new JButton("Login");
loginButton.addActionListener(this);
loginButton.setBounds(10, 80, 80, 25);
panel.add(loginButton);
return panel;
}
public void close()
{
System.exit(0);
}
public void addLogin()
{
add(loginPanel());
validate();
}
//action method
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == loginButton)
System.out.println("loginButton was pressed so I should do something, maybe?");
if (e.getSource() == loginAction)
addLogin();
if (e.getSource() == exitAction)
close();
}
public static void main(String[] args) {
Frame me = new Frame();
me.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
me.setResizable(false);
me.setLocationRelativeTo(null);
me.setVisible(true);
}
}
您会注意到我创建了loginPanel()
方法以在调用时返回JPanel。当您选择loginAction菜单项时,它会将面板添加到框架中。如果你想用另一个面板替换它,它就不容易被删除,但我相信你想要从这个框架转向一个用于纯粹显示数据的框架。
这可能不是您希望与项目一起使用的方向。如果没有,请发表评论,我会看看我是否能够提供帮助。