你先设大小,然后再设置布局管理器,对比一下我修改过以后的程序就知道了
import javax.swing.*;
import java.awt.*;
public class ClassA extends JFrame
{
public ClassA()
{
this.setTitle("Login"); //set the title
setSize(450,400);
JPanel panel=new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints gbCons=new GridBagConstraints();
//place the components on the frame
gbCons.gridx=0;
gbCons.gridy=0;
gbCons.anchor=GridBagConstraints.EAST;
JLabel lblUserName=new JLabel("Enter Username ");
panel.add(lblUserName, gbCons); getContentPane().add(panel);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String args[])
{
new ClassA();
}
}
import javax.swing.*;
import java.awt.*;
public class ClassA extends JFrame
{
public ClassA()
{
this.setTitle("Login"); //set the title
setSize(450,400);
JPanel panel=new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints gbCons=new GridBagConstraints();
//place the components on the frame
gbCons.gridx=0;
gbCons.gridy=0;
gbCons.anchor=GridBagConstraints.EAST;
JLabel lblUserName=new JLabel("Enter Username ");
panel.add(lblUserName, gbCons); getContentPane().add(panel);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String args[])
{
new ClassA();
}
}
如果你的类是直接继承JFrame后来显示的。那么可能出现显示不正常的问题。用this.show()可以解决问题。
但如果你的类,比如你的类继承了JPanel,然后在类里面定义一个JFrame变量,通过这个JFrame变量来显示窗口的话,即使你不用show()方法也是可以正常显示的。