javax.swing.JFrame中使用jpanel来布局
来源:互联网 发布:液压绘图软件 编辑:程序博客网 时间:2024/06/08 17:34
【转自】www.cnblogs.com/lm002003/archive/2012/06/10/2544167.html
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=》(各种组件)
- javax.swing.JFrame中使用jpanel来布局
- javax.swing.JFrame中使用jpanel来布局
- 发现java的swing的jframe 应该使用jpanel来布局
- java swing中jpanel跟jframe的区别
- javax.swing.JFrame
- 报错javax.swing.JPanel 的 main() 中发生异常
- java swing difference between Jframe and JPanel
- java中jframe 和jpanel的区别 (java的swing界面)
- Javax.swing中JFrame.getContentPane().add(pane)与JFrame.add(pane)有何区别?
- Javax.swing中JFrame.getContentPane().add(pane)与JFrame.add(pane)有何区别?
- Javax.swing中JFrame.getContentPane().add(pane)与JFrame.add(pane)有何区别?
- java之JFrame、JPanel混合布局
- 在JFrame中设置JPanel的值
- swing中Jpanel设置透明度
- swing中一个Jframe调用另一个Jframe
- Java Swing界面编程(12)---JPanel布局
- Swing布局问题,多个Jpanel切换
- Java中Swing编程JFrame窗口的使用
- 网页嵌套视频
- Eclipse 插件地址
- 【opencv】统计图像二值化后白色像素点个数
- The type R is already defined
- 奈奎斯特定理和香农定理解析
- javax.swing.JFrame中使用jpanel来布局
- SpringMVC学习系列(6) 之 数据验证
- hdu 1281 棋盘游戏 二分匹配
- no valid host issues mark
- php oop杂
- ubuntu apt-get sources.list 2015 最新备份
- 高并发思路(一)-系统配置
- DirectX9 检索关于顶点和索引的信息
- QML之DelegateModel和DelegateModelGroup