簡體   English   中英

在擴展JFrame之前,不會顯示JPanel

[英]JPanel not showing until JFrame is expanded

這對我來說毫無意義。 我有一個可以正常工作的登錄屏幕,該登錄屏幕是從我的主類中調用的,問題是用於容納文本區域等的JPanel直到我單擊窗口的邊緣時才會顯示(展開它)

這是我的代碼:

主要

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;

public class SchoolSystem
{

public static void main (String [] args)
{

     Login lg = new Login();

}
}

登錄

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;

 public class Login extends JFrame implements ActionListener
 {


 JFrame frame;

 JButton SUBMIT;
 JPanel panel;
 JLabel label1,label2;
 public Menus m = new Menus();
 final JTextField  text1,text2;

  {
      frame = new JFrame("Welcome");
      frame.setSize(310,110);
      frame.setVisible(true);
      label1 = new JLabel();
      label1.setText("User ID:");
      text1 = new JTextField(15);

      label2 = new JLabel();
      label2.setText("Password:");
      text2 = new JPasswordField(15);

      SUBMIT=new JButton("LOGIN");

      panel=new JPanel(new GridLayout(3,1));
      panel.add(label1);
      panel.add(text1);
      panel.add(label2);
      panel.add(text2);
      panel.add(SUBMIT);
      add(panel,BorderLayout.CENTER);
      SUBMIT.addActionListener(this);
      text2.addActionListener(this);
      setTitle("Welcome");
      frame.add(panel);
  }


 public void actionPerformed(ActionEvent ae)
      {
          //Gets the text inside the User ID and Password Panels
          String value1=text1.getText();
          String value2=text2.getText();

          //Compare text to actual ID and password, Act accordingly
          //In this case show a Menu for the Head Teacher
          if ((value1.equals("Admin") && value2.equals("1234"))){
          m.adminMenu();
          frame.setVisible(false);
          }
          else{
          if (value1.equals("Teach") && value2.equals("0000")) {
          m.teacherMenu();
          frame.setVisible(false);
          }

          else{
          JOptionPane.showMessageDialog(this,"Incorrect login or password",
          "Error",JOptionPane.ERROR_MESSAGE);
          }
          }
      }

 }
  • frame.setVisible(true); 在所有JComponents添加到JFrame之后,必須是最后一個代碼行

  • 最后的代碼行可以是frame.pack(); frame.setVisible(true);

  • 使用JDialog代替JFrame來完成這項工作,

  • 最好的方法是使用CardLayout (從logon panel切換到another panel(s)后調用JFrame.pack() another panel(s)

正如其他人提到的那樣, frame.setVisible(true)應該是代碼的最后一行。 但是,如果您希望將代碼保持原樣,則應在GUI代碼的末尾,即在初始化程序塊的右大括號之前調用frame.revalidate()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM