从菜单栏打开登录屏幕

时间:2014-09-21 17:55:25

标签: java swing

我想为学校创建这个小应用程序,它自动计算你需要通过的等级。提出了两个类,框架类,基本上包含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);
    }
}

2 个答案:

答案 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菜单项时,它会将面板添加到框架中。如果你想用另一个面板替换它,它就不容易被删除,但我相信你想要从这个框架转向一个用于纯粹显示数据的框架。

这可能不是您希望与项目一起使用的方向。如果没有,请发表评论,我会看看我是否能够提供帮助。