问题描述:
我用GridBagLayout进行布局,添加了组件运行时,只显示框架,却没显示组件(组件未添加成功)。源程序如下,跪求大虾相助丶小弟不胜感激···
package AddressBook;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class LoginInterface extends JPanel
{
public final int WIDTH = 350;
public final int HEIGHT = 250;
//该方法用于将控件添加到容器中
public void add(Component c,GridBagConstraints gbc,int x,int y,int w,int h)
{
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = w;
gbc.gridheight = h;
add(c,gbc);
}
LoginInterface()
{
JFrame li = new JFrame();
li.setTitle("通讯录");//设置标题
li.setLayout(new GridBagLayout());
//以下几行创建按钮、标签、文本框
JButton login = new JButton("登录");
JButton exit = new JButton("退出");
JLabel zhanghao = new JLabel("账号");
JLabel mima = new JLabel("密码");
JLabel note = new JLabel("请输入您的名字,如:zhaoshuaihua");//注释标签
JTextField user = new JTextField(15);
JTextField password = new JTextField(15);
JPanel photo = new JPanel();
GridBagConstraints gbc = new GridBagConstraints();//创建约束对象
gbc.fill = GridBagConstraints.NONE ;
gbc.anchor = GridBagConstraints.CENTER ;
gbc.weightx = 3;
gbc.weighty = 4;
add(login,gbc,1,3,1,1);
add(exit,gbc,3,3,1,1);
add(zhanghao,gbc,0,0,1,1);
add(mima,gbc,0,2,1,1);
add(note,gbc,1,1,2,1);
add(user,gbc,1,0,2,1);
add(password,gbc,1,2,2,1);
add(photo,gbc,3,0,1,3);
li.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); //***************
int x = (d.width - WIDTH)/2; //设置登录窗口
int y = (d.height - HEIGHT)/2; //使在屏幕中央显示
li.setBounds(x,y,WIDTH,HEIGHT); //***************
li.setVisible(true);
}
public static void main(String[] args)
{
LoginInterface li = new LoginInterface();
}
}
谢谢了~
我用GridBagLayout进行布局,添加了组件运行时,只显示框架,却没显示组件(组件未添加成功)。源程序如下,跪求大虾相助丶小弟不胜感激···
package AddressBook;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class LoginInterface extends JPanel
{
public final int WIDTH = 350;
public final int HEIGHT = 250;
//该方法用于将控件添加到容器中
public void add(Component c,GridBagConstraints gbc,int x,int y,int w,int h)
{
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = w;
gbc.gridheight = h;
add(c,gbc);
}
LoginInterface()
{
JFrame li = new JFrame();
li.setTitle("通讯录");//设置标题
li.setLayout(new GridBagLayout());
//以下几行创建按钮、标签、文本框
JButton login = new JButton("登录");
JButton exit = new JButton("退出");
JLabel zhanghao = new JLabel("账号");
JLabel mima = new JLabel("密码");
JLabel note = new JLabel("请输入您的名字,如:zhaoshuaihua");//注释标签
JTextField user = new JTextField(15);
JTextField password = new JTextField(15);
JPanel photo = new JPanel();
GridBagConstraints gbc = new GridBagConstraints();//创建约束对象
gbc.fill = GridBagConstraints.NONE ;
gbc.anchor = GridBagConstraints.CENTER ;
gbc.weightx = 3;
gbc.weighty = 4;
add(login,gbc,1,3,1,1);
add(exit,gbc,3,3,1,1);
add(zhanghao,gbc,0,0,1,1);
add(mima,gbc,0,2,1,1);
add(note,gbc,1,1,2,1);
add(user,gbc,1,0,2,1);
add(password,gbc,1,2,2,1);
add(photo,gbc,3,0,1,3);
li.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); //***************
int x = (d.width - WIDTH)/2; //设置登录窗口
int y = (d.height - HEIGHT)/2; //使在屏幕中央显示
li.setBounds(x,y,WIDTH,HEIGHT); //***************
li.setVisible(true);
}
public static void main(String[] args)
{
LoginInterface li = new LoginInterface();
}
}
谢谢了~
li.setLayout(new GridBagLayout());改成:
setLayout(new GridBagLayout());
li.setContentPane(this);为什么呢?
因为你要给一个JFrame添加组件,应该在其容器面板上添加
而不似乎直接给JFrame去add
你的 li 是JFrame,你设置它的Layout有什么用?
应该给这个JFrame的容器面板设置Layout
而你的这个类继承自一个JPanel,你的本意应该是用其作为JFrame的容器面板
所以改成上面那样就可以了
在:
li.setTitle("通讯录");//设置标题 li.setLayout(new GridBagLayout());
之间添加语句:li.add(this);
就可以运行显示了
.....已调试过.....
改为:setLayout(new GridBagLayout());
同#1楼大哥的差不多,之前我也曾只加过
li.add(this);
不过因为其他的原因没成功。
这还是由于没有设置中间容器的原因啊,只有一个顶层容器是无法将基本组件添加进去的...而且#3楼这句话很到位,改之后就显示正常了,只是还不太懂:
"li.setLayout(new GridBagLayout());"
和
"setLayout(new GridBagLayout());"
在这里有什么区别啊?
设置的是你的JFrame的布局,
而不是设置的JFrame的容器面板的的布局而setLayout(new GridBagLayout());
设置的是你当前类,即你这个继承了JPanel的LoginInterface类的布局
你真正要作为容器面板的是这个JPanel
所以要设置这个JPanel的布局