我想用Java为一个库系统做一个简单的登录。如何获得框架中的文本字段?

我想用Java为一个库系统做一个简单的登录。如何获得框架中的文本字段?,java,swing,Java,Swing,我需要一个简单的登录页面,学生可以在其中输入他的/她的凭据。但我无法使文本字段显示在用户名和密码之外,以显示在用户名下面。 这是我到目前为止写的代码 package library; import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class L

我需要一个简单的登录页面,学生可以在其中输入他的/她的凭据。但我无法使文本字段显示在用户名和密码之外,以显示在用户名下面。 这是我到目前为止写的代码

package library;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class Loginpage {
private JPanel panel;
private JLabel label;
private JFrame frame;
private JTextField field;
/*Constructor*/public Loginpage(){
    gui();
}

    public void gui() {
    frame = new JFrame("WELCOME ");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(500, 500, 500, 500);/*X axis,Y axis,Width,Height*/
    frame.setVisible(true);


    panel = new JPanel();
    label = new JLabel("Username");
    field = new JTextField(20);
    panel.add(label);
    frame.add(panel);
    frame.add(label,BorderLayout.WEST);

    frame.add(field);


}

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

   }

 ``}

首先,setVisible(true)应该始终放在末尾,除非您希望显示输出,然后对其进行修改,这不是通常的情况

如果您的意思是想要此输出:


用户名:uuuuuuuuuuuuuuuuup>你的问题是你在做
frame.setVisible(true)太早了

试试这个:

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Loginpage {
    private JPanel panel;
    private JLabel label;
    private JFrame frame;
    private JTextField field;

    /* Constructor */public Loginpage() {
        gui();
    }

    public void gui() {
        frame = new JFrame("WELCOME ");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(500, 500, 500, 500);/* X axis,Y axis,Width,Height */

        panel = new JPanel();
        label = new JLabel("Username");
        field = new JTextField(20);
        panel.add(label);
        frame.add(panel);
        frame.add(label, BorderLayout.WEST);

        frame.add(field);

        frame.setVisible(true);

    }

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

    }
    }
还有其他一些事情:

  • 您可能需要将
    Layout
    添加到面板中,例如
    panel.setLayout(newflowlayout())
  • 而不是通过
    frame.add(field)将
    field
    添加到
    frame
    ,您应该通过
    panel.add(字段)将其添加到
    面板
  • 这是
    frame.add(标签,BorderLayout.WEST)panel.add(label,BorderLayout.WEST)。但这将在文本字段的右侧显示标签
这些更新后,代码变为:

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Loginpage {
    private JPanel panel;
    private JLabel label;
    private JFrame frame;
    private JTextField field;

    /* Constructor */public Loginpage() {
        gui();
    }

    public void gui() {
        frame = new JFrame("WELCOME ");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(500, 500, 500, 500);/* X axis,Y axis,Width,Height */

        panel = new JPanel();
        panel.setLayout(new FlowLayout());
        label = new JLabel("Username");
        field = new JTextField(20);
        panel.add(label);
        panel.add(field);
        frame.add(panel);

        frame.setVisible(true);

    }

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

    }

}

顺便说一句,您将
标签添加到两个不同的容器中。这可能会导致意想不到的问题。