Swing组件布局setLayout(null)和setBounds(int,int,int,int)用法及组件分层显示

在Swing组件布局中一般性设置控件位置和大小:使用.setBounds(int,int,int,int)设置控件坐标大小.但必须加.setLayout(null);

 

例如下面这段代码虽然利用了setBounds(int,int,int,int)进行布局,但是运行后图一显示的的结果并不是按照布局显示的,而是按照默认的FlowLayout(每个JPanel对象初始化时都使用FlowLayout布局,)布局显示的

import javax.swing.*;
public class JLabelDemo extends JFrame{
 
  private JButton btn1;
  private JButton btn2;
  private JButton btn3;
  private JPanel pane;


 public JLabelDemo(){
  pane=new JPanel();      //创建面板
  btn1=new JButton("按钮1");    //创建按钮1
  btn1.setBounds(100, 100, 100, 100);   //setBounds(int,int,int,int)设置控件坐标大小
  btn2=new JButton("按钮2");    //创建按钮2
  btn2.setBounds(200, 100, 100, 100);
  btn3=new JButton("按钮3");    //创建按钮1
  btn3.setBounds(100, 200, 100, 100);
  pane.add(btn1);
  pane.add(btn2);
  pane.add(btn3);     // 将组件添加到面板中
  this.add(pane);    //将面板添加到窗体
  this.setVisible(true);
  this.setBounds(100,100,400,400);
 }
 
public static void main(String args[]){
 new JLabelDemo();
}
}

 


                               图一
当我们在构造函数中加入setLayout(null)时,则会按照我们规定的位置显示,显示结果图二,程序如下,通过对比我们可以发现,我们两个程序的不同之处就在于第二个程序中我们创建面板后添加了pane.setLayout(null),这些细节问题希望大家多多注意
import javax.swing.*;
public class JLabelDemo extends JFrame{
 
  private JButton btn1;
  private JButton btn2;
  private JButton btn3;
  private JPanel pane;


 public JLabelDemo(){
  pane=new JPanel();      //创建面板
  pane.setLayout(null);
  btn1=new JButton("按钮1");    //创建按钮1
  btn1.setBounds(100, 100, 100, 100);   //setBounds(int,int,int,int)设置控件坐标大小
  btn2=new JButton("按钮2");    //创建按钮2
  btn2.setBounds(200, 100, 100, 100);
  btn3=new JButton("按钮3");    //创建按钮1
  btn3.setBounds(100, 200, 100, 100);
  pane.add(btn1);
  pane.add(btn2);
  pane.add(btn3);     // 将组件添加到面板中
  this.add(pane);    //将面板添加到窗体
  this.setVisible(true);
  this.setBounds(100,100,400,400);
 }
 
public static void main(String args[]){
 new JLabelDemo();
}
}

控件被添加的先后顺续决定控件是否可见.即:窗口按层来显示控件./*先添加的控件放在第一层后添加的放在后一层.*/如果先添加的控件大小大于后添加的并两控件处于同一位置则先添加的控件覆盖后添加的.因此如果想然所有控件都可见则需将在同一位置的两控件择面积小的先添加而后才是面积大的.下面举例说明这一点
还是刚才的例子我们稍微做一下改动我们将上面的程序中 btn1.setBounds(100, 100, 100, 100);   改为btn1.setBounds(100, 100, 200, 200); 
显示结果为
我们再将按钮添加到面板的顺序换一下看看会出现什么结果,找上面程序到这里
pane.add(btn1);
  pane.add(btn2);
现在交换添加顺序即变成
pane.add(btn2);
pane.add(btn1);
则显示结果为
一点小小的学习心得与大家共享,不足之处请大家多多指教,


你可能感兴趣的:(Swing组件布局setLayout(null)和setBounds(int,int,int,int)用法及组件分层显示)