java extend jframe_javax.swing.JFrame中使用jpanel来布局

本文介绍了在Java Swing中,如何利用JPanel进行布局管理,以提高代码规范性和解决组件显示问题。通过创建JPanel,将组件添加到JPanel中,然后将JPanel添加到JFrame的特定位置,如BorderLayout.CENTER,实现更精确的组件定位。示例代码展示了如何设置JButton的位置并调整JPanel的位置和背景颜色。
摘要由CSDN通过智能技术生成

javax.swing.JFrame中使用jpanel来布局

【本文摘自CSDN】

通俗的讲jframe相当与桌子,而jpanel相当桌布,jbutton,jlabel等相当于杯子,碗筷等,杯子,碗筷虽然可以直接放到桌子上但不是很规范,应该放到桌布上才对。

以前我没有用jpanel来布局。直接就是jframe.add(jlabel1);然后就是jlabel1.setbound();这种做法不妥,虽然窗口可以正常显示,但是还是不规范,有事后会有点小问题,当组件更改的时候会有点问题,会有阴影(以前遇到过这种问题)。

正确的做法是

1.使用Container content=this.getContentPane();得到容器

2.实例化一个jpanel 例如JPanel  panel1=new   javax.swing.JPanel();

3.实例化组件比如JButton等

4.使用panel1.add()方法添加组件

5.定位比如说JButton1.setbound(0,0,23,34);注意这里的坐标是相对于其所在的容器panel1

6.使用例如content.add(panel,BorderLayout.CENTER);方法把“桌布”(panel1)放到“桌子”content上。(JFrame的默认布局是BorderLayout)

示例代码如下:

1: import java.awt.BorderLayout;

2: import java.awt.Color;

3: import java.awt.Container;

4: import javax.swing.JButton;

5: import javax.swing.JFrame;

6: import javax.swing.JPanel;

7: public class NewClass extends JFrame {

8:  /** Creates a new instance of NewClass */

9:  public NewClass() {

10:   init();

11:  }

12:  public void init() {

13:   // 实例化JPanel等一些组件

14:   JPanel pan1 = new JPanel();

15:   JButton jb1 = new JButton("one in pan1");

16:   JButton jb2 = new JButton("two in pan1");

17:   JButton jb3 = new JButton("one out panel");

18:   JButton jb4 = new JButton("two out panel");

19:   // setBound()坐标是相对于pan1而言的

20:   jb1.setBounds(0, 0, 100, 30);

21:   jb2.setBounds(0, 200, 100, 30);

22:   // 得到容器为什么不需要实例化?可能是因为每个窗口都有这个对象

23:   Container cont = getContentPane();

24:   // 将pan1添加到容器中

25:   cont.add(pan1, BorderLayout.CENTER);

26:   cont.add(jb4, BorderLayout.WEST);

27:   cont.add(jb3, BorderLayout.EAST);

28:   // 将组件添加到pan1中,并对pan1做一些初始化

29:   pan1.setLocation(70, 70);

30:   pan1.setLayout(null);//注意此处的null

31:   pan1.add(jb1);

32:   pan1.add(jb2);

33:   pan1.setBackground(Color.ORANGE);

34:   this.setBounds(0, 0, 400, 400);

35:   this.setVisible(true);

36:  }

37:  public static void main(String arg[]) {

38:   NewClass test = new NewClass();

39:  }

40: }

问题1:做窗口程序时候Container cont=getContentPane(); cont.add(pan1,BorderLayout.CENTER);//如何定位pan1位置?如何把pan1放到指定的坐标?

答:可以使用pan1.setbound()方法,相应的要设置cont.setLayout(null);    注意JPanel的默认布局是FlowLayout

如果没有设置cont.setLayout(null);系统会使用默认的布局管理器,那么pan1.setbound()就不会起作用,比如说上例cont没有设置布局管理器为空。

容器包含关系JFrame=》  Container=》JPanel=》(各种组件)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值