黑马程序员技术交流社区

标题: 使用GuidBagLayout设计窗体是遇到的问题 [打印本页]

作者: 韩伟    时间: 2012-8-3 16:53
标题: 使用GuidBagLayout设计窗体是遇到的问题
练习GUI时,自己写了一个小程序,设计一个网格包布局的窗口,代码如下:
  1. import java.awt.*;
  2. import java.awt.event.*;

  3. class GuiDemo4 extends Frame
  4. {
  5.         Label l1,l2,l3,l4;
  6.         TextField tf1,tf2,tf3;
  7.         Button btn1,btn2;
  8.         CheckboxGroup cbg;
  9.         Checkbox cb1,cb2,cb3,cb4;
  10.         GridBagLayout gbl;
  11.         GridBagConstraints gbc;
  12.         public GuiDemo4(String title)
  13.         {
  14.                 super(title);
  15.                 l1 = new Label("用户名:");
  16.                 l2 = new Label("密码:");
  17.                 l3 = new Label("确认密码:");
  18.                 l4 = new Label("获取途径:");
  19.                 tf1 = new TextField(20);
  20.                 tf2 = new TextField(20);
  21.                 tf3 = new TextField(20);
  22.                 gbl = new GridBagLayout();
  23.                 setLayout(gbl);
  24.                 gbc = new GridBagConstraints();
  25.                 Panel p = new Panel();
  26.                 cbg = new CheckboxGroup();
  27.                 cb1 = new Checkbox("搜索",cbg,false);
  28.                 cb2 = new Checkbox("广告",cbg,false);
  29.                 cb3 = new Checkbox("朋友",cbg,false);
  30.                 cb4 = new Checkbox("其他",cbg,false);
  31.                 p.add(cb1);
  32.                 p.add(cb2);
  33.                 p.add(cb3);
  34.                 p.add(cb4);
  35.                 btn1 = new Button("提交");
  36.                 btn2 = new Button("重填");
  37.                 Panel p2 = new Panel();
  38.                 p2.add(btn1);
  39.                 p2.add(btn2);
  40.                
  41.                 addWindowListener(new WindowAdapter()
  42.                 {
  43.                         public void windowClosing(WindowEvent e)
  44.                         {
  45.                                 System.exit(0);
  46.                         }
  47.                 });               
  48.                 gbc.fill = GridBagConstraints.HORIZONTAL;               
  49.                 addComponent(l1,0,0,1,1);
  50.                 addComponent(tf1,0,2,1,4);
  51.                 addComponent(l2,1,0,1,1);
  52.                 addComponent(tf2,1,2,1,4);
  53.                 addComponent(l3,2,0,1,1);
  54.                 addComponent(tf3,2,2,1,4);
  55.                 addComponent(l4,4,0,1,1);
  56.                 addComponent(p,4,2,1,1);
  57.                 addComponent(p2,5,2,1,5);
  58.         }       
  59.         public  void addComponent(Component c,int row,int col,int nrow,int ncol )
  60.         {
  61.                 gbc.gridx = col;
  62.                 gbc.gridy = row;
  63.                 gbc.gridheight = ncol;
  64.                 gbc.gridwidth = nrow;
  65.                 gbl.setConstraints(c,gbc);
  66.                 add(c);
  67.         }
  68.         public static void main(String []args)
  69.         {
  70.                 GuiDemo4 f = new GuiDemo4("网格包布局管理");
  71.                 f.setSize(300,200);                               
  72.                 f.setVisible(true);               
  73.         }
  74. }
复制代码
运行结果如下:
我怎么改文本框就是不上去,请大家给找找原因!{:soso_e183:}





作者: 王渠    时间: 2012-8-3 17:20
f.setSize(300,200);这个方法你先不要用
试试看f.pack();这个方法是自己去适应窗体大小的。
作者: 韩伟    时间: 2012-8-3 17:49
用pack木有用啊,除了窗口变小了,好像不是这个问题
作者: 黑马-张化    时间: 2012-8-7 16:53

  1. <P> </P>
复制代码
/*
* 网格布局 、、用户名登陆
*/
import java.awt.*;
import javax.swing.*;
public class Demo8_6 extends JFrame
{
//定义组件
JPanel jp1,jp2,jp3,jp4;
JLabel jlb1,jlb2,jlb3;
JButton jb1,jb2;
JTextField jtf1,jtf2;
JPasswordField jpf1,jpf2;
public static void main(String[] args)
{
  Demo8_6 demo = new Demo8_6();
}
//
public Demo8_6()
{
  //创建组件
  jp1 = new JPanel();
  jp2 = new JPanel();
  jp3 = new JPanel();
  jp4 = new JPanel();
  
  jlb1 = new JLabel("用       户         名:");
  jlb2 = new JLabel("密                      码:");
  jlb3 = new JLabel("再输入一次密码:");
  
  
  jb1 = new JButton("登陆");
  jb2 = new JButton("取消");
  
  jtf1 = new JTextField(10);
  jpf1 = new JPasswordField(10);
  jpf2 = new JPasswordField(10);
  
  //设置布局管理器
  this.setLayout(new GridLayout(9,2));
  
  //加入各个组件
  jp1.add(jlb1);
  jp1.add(jtf1);
  
  jp2.add(jlb2);
  jp2.add(jpf1);
  
  jp3.add(jb1);
  jp3.add(jb2);
  
  jp4.add(jlb3);
  jp4.add(jpf2);
  
  //加入到JFrame
  this.add(jp1);
  this.add(jp2);
  this.add(jp4);
  this.add(jp3);
  
  
  //设置标题
  this.setTitle("用户名登陆");
  //设置大小
  this.setSize(400,300);
  //禁止改变窗体大小
  this.setResizable(false);
  //关闭窗口
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  //显示窗体
  this.setVisible(true);
   
  
  
  
  
}
}


希望对楼主有所帮助

QQ截图20120807164932.png (11.55 KB, 下载次数: 50)

QQ截图20120807164932.png

作者: 黑马-张化    时间: 2012-8-7 16:54
  1. package com.test1;

  2. /*
  3. * 网格布局 、、用户名登陆
  4. */
  5. import java.awt.*;
  6. import javax.swing.*;
  7. public class Demo8_6 extends JFrame
  8. {
  9.         //定义组件
  10.         JPanel jp1,jp2,jp3,jp4;
  11.         JLabel jlb1,jlb2,jlb3;
  12.         JButton jb1,jb2;
  13.         JTextField jtf1,jtf2;
  14.         JPasswordField jpf1,jpf2;
  15.         public static void main(String[] args)
  16.         {
  17.                 Demo8_6 demo = new Demo8_6();
  18.         }
  19.         //
  20.         public Demo8_6()
  21.         {
  22.                 //创建组件
  23.                 jp1 = new JPanel();
  24.                 jp2 = new JPanel();
  25.                 jp3 = new JPanel();
  26.                 jp4 = new JPanel();
  27.                
  28.                 jlb1 = new JLabel("用       户         名:");
  29.                 jlb2 = new JLabel("密                      码:");
  30.                 jlb3 = new JLabel("再输入一次密码:");
  31.                
  32.                
  33.                 jb1 = new JButton("登陆");
  34.                 jb2 = new JButton("取消");
  35.                
  36.                 jtf1 = new JTextField(10);
  37.                 jpf1 = new JPasswordField(10);
  38.                 jpf2 = new JPasswordField(10);
  39.                
  40.                 //设置布局管理器
  41.                 this.setLayout(new GridLayout(9,2));
  42.                
  43.                 //加入各个组件
  44.                 jp1.add(jlb1);
  45.                 jp1.add(jtf1);
  46.                
  47.                 jp2.add(jlb2);
  48.                 jp2.add(jpf1);
  49.                
  50.                 jp3.add(jb1);
  51.                 jp3.add(jb2);
  52.                
  53.                 jp4.add(jlb3);
  54.                 jp4.add(jpf2);
  55.                
  56.                 //加入到JFrame
  57.                 this.add(jp1);
  58.                 this.add(jp2);
  59.                 this.add(jp4);
  60.                 this.add(jp3);
  61.                
  62.                
  63.                 //设置标题
  64.                 this.setTitle("用户名登陆");
  65.                 //设置大小
  66.                 this.setSize(400,300);
  67.                 //禁止改变窗体大小
  68.                 this.setResizable(false);
  69.                 //关闭窗口
  70.                 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  71.                 //显示窗体
  72.                 this.setVisible(true);
  73.                                
  74.                
  75.                
  76.                
  77.                
  78.         }
  79. }
复制代码
刚才提交有误、、不好意思啊、
作者: 韩伟    时间: 2012-8-7 17:28
黑马-张化 发表于 2012-8-7 16:54
刚才提交有误、、不好意思啊、

恩,谢谢你的回答。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2