JFrame中使用jpanel来布局
2019獨角獸企業重金招聘Python工程師標準>>>
????????通俗的講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)
示例代碼如下:
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel;public class NewClass extends JFrame {public NewClass() {init();}public void init() {// 實例化JPanel等一些組件JPanel pan1 = new JPanel();JButton jb1 = new JButton("one in pan1");JButton jb2 = new JButton("two in pan1");JButton jb3 = new JButton("one out panel");JButton jb4 = new JButton("two out panel");// setBound()坐標是相對于pan1而言的jb1.setBounds(0, 0, 100, 30);jb2.setBounds(0, 200, 100, 30);// 得到容器為什么不需要實例化?可能是因為每個窗口都有這個對象Container cont = getContentPane();// 將pan1添加到容器中cont.add(pan1, BorderLayout.CENTER);cont.add(jb4, BorderLayout.WEST);cont.add(jb3, BorderLayout.EAST);// 將組件添加到pan1中,并對pan1做一些初始化pan1.setLocation(70, 70);pan1.setLayout(null);//注意此處的nullpan1.add(jb1);pan1.add(jb2);pan1.setBackground(Color.ORANGE);this.setBounds(0, 0, 400, 400);this.setVisible(true);}public static void main(String arg[]) {NewClass test = new NewClass();}}
問題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 ?=>(各種組件)
轉載于:https://my.oschina.net/u/2391658/blog/702631
總結
以上是生活随笔為你收集整理的JFrame中使用jpanel来布局的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7 apache2.4 测试
- 下一篇: 汉恩互联「绘动画室」,触摸背景墙