JAVA学习6-关于窗口布局
创造点
编辑于 2023年04月30日 23:38
收录于文集
共9篇
  1. 通过测试发现用JFram.add()与JFram.getContentPand().add()两种方式添加的组件结果是一样的,个人认为通过JFram.add()方式添加的组长最终还是会加到ContentPanel这个内容面板容器中。

  2. JFram与ContentPanel面板的默认布局方式为BorderLayout(边框布局)

    具体如下图

边框布局

正确的添加组件的方式应该提供两个参数,第一个是组件对象,第二个是位置常量,就是上图中的英文,具体代码如下:

代码块
text/x-java
自动换行
复制代码
//下面是创建JLabel对象
JLabel jLabe1 = new JLabel(new ImageIcon("animal\\animal2\\1.jpg"));
JLabel jLabe2 = new JLabel(new ImageIcon("animal\\animal2\\2.jpg"));
JLabel jLabe3 = new JLabel(new ImageIcon("animal\\animal2\\3.jpg"));
JLabel jLabe4 = new JLabel(new ImageIcon("animal\\animal2\\4.jpg"));
JLabel jLabe5 = new JLabel(new ImageIcon("animal\\animal2\\5.jpg"));
//下面是把上面的5个组件添加到内容面板中,同时指定位置(默认的布局方式是边框布局)
jFrame1.getContentPane().add(jLabe1,BorderLayout.CENTER);
jFrame1.getContentPane().add(jLabe2,BorderLayout.PAGE_END);
jFrame1.getContentPane().add(jLabe3,BorderLayout.PAGE_START);
jFrame1.getContentPane().add(jLabe4,BorderLayout.LINE_END);
jFrame1.getContentPane().add(jLabe5,BorderLayout.LINE_START);
复制成功

如果在用Add()方法添加组件时没有指定第二个参数,默认是CENTER,所以如果添加多个组件面没有指定位置,会在居中的位置进行覆盖彼此。

3.如果添加多个组件,并且组件都指定的位置和大小数据,但在添加时没有指定位置(前提是没有改变默认的布局方式,也就是还是默认的边框布局),那么多个组件的最后一个会居中,而不管你设置的位置是什么。注意是多个组件的最后一个(如果是5个,那前4个没问题,第5个居中;如果是10,那前9个没有问题,是按照你指定的坐标位置放置,但第10个不管你设置什么坐标都会居中)

代码块
text/x-java
自动换行
复制代码
//下面是创建JLabel对象
JLabel jLabe1 = new JLabel(new ImageIcon("animal\\animal2\\1.jpg"));
JLabel jLabe2 = new JLabel(new ImageIcon("animal\\animal2\\2.jpg"));
JLabel jLabe3 = new JLabel(new ImageIcon("animal\\animal2\\3.jpg"));
JLabel jLabe4 = new JLabel(new ImageIcon("animal\\animal2\\4.jpg"));
JLabel jLabe5 = new JLabel(new ImageIcon("animal\\animal2\\5.jpg"));
//下面是把上面的5个组件添加到内容面板中,同时指定位置(默认的布局方式是边框布局)
jFrame1.getContentPane().add(jLabe1,BorderLayout.CENTER);
jFrame1.getContentPane().add(jLabe2,BorderLayout.PAGE_END);
jFrame1.getContentPane().add(jLabe3,BorderLayout.PAGE_START);
jFrame1.getContentPane().add(jLabe4,BorderLayout.LINE_END);
jFrame1.getContentPane().add(jLabe5,BorderLayout.LINE_START);

jLabe1.setBounds(0+83, 0+134,105,105);
jFrame1.getContentPane().add(jLabe1);

jLabe2.setBounds(105+83, 0+134,105,105);
jFrame1.getContentPane().add(jLabe2);

jLabe3.setBounds(210+83, 0+134,105,105);
jFrame1.getContentPane().add(jLabe3);

jLabe4.setBounds(315+83, 0+134,105,105);
jFrame1.getContentPane().add(jLabe4);
//下面是最后一个组件,虽然指定的坐标,但它会居中显示,前面的组件没有问题
//注意不管多少个,它只把最后一个居中
jLabe5.setBounds(0+83, 105+134,105,105);
jFrame1.getContentPane().add(jLabe5);
复制成功

注意:因此为了能自己定位组件,一般把布局模式取消(也就是设置为无)

          JFram.setLayout(null)