zoukankan      html  css  js  c++  java
  • Java学习——用户界面的布局

    使用布局管理器

      FlowLayout管理器

      面板的默认布局管理器是java.awt包中的FlowLayout类。使用FlowLayout时,像在页面中排列英文单词那样排组件:从左到右排列,当前行没有空间后进入下一行。

     1 import java.awt.*;
     2 import javax.swing.*;
     3 
     4 public class Crisis extends JFrame {
     5     JButton panicButton;
     6     JButton dontPanicButton;
     7     JButton blameButton;
     8     JButton mediaButton;
     9     JButton saveButton;
    10     
    11     public Crisis() {
    12         super("Crisis");
    13         setLookAndFeel();
    14         setSize(348, 128);
    15         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    16 //        1.默认布局
    17         FlowLayout flo = new FlowLayout();
    18         setLayout(flo);
    19         panicButton = new JButton("Panic");
    20         dontPanicButton = new JButton("Don't Panic");
    21         blameButton = new JButton("Blame Others");
    22         mediaButton = new JButton("Notify the Media");
    23         saveButton  = new JButton("save yourself");
    24         add(panicButton);
    25         add(dontPanicButton);
    26         add(blameButton);
    27         add(mediaButton);
    28         add(saveButton);
    29         setVisible(true);
    30     }
    31     
    32     private void setLookAndFeel() {
    33         try {
    34             UIManager.setLookAndFeel(
    35                     "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    36         } catch (Exception exc) {
    37             // ignore error
    38         }
    39     }
    40 
    41     public static void main(String[] arguments) {
    42         Crisis frame = new Crisis();
    43     }
    44 }
    View Code

      GridLayout管理器

      GridLayout类位于java.awt包中,它将容器中所有的组件组织为指定的行数和列数。分配给每个组件的显示区域都相同。

      当组件加入到容器中时,GridLayout将所有的组件放置到网格中的某个位置,而且组件是从左到右依次添加,当这一行满了之后,在从下一行的最左边开始添加。

     1 import java.awt.*;
     2 import javax.swing.*;
     3 
     4 public class Crisis extends JFrame {
     5     JButton panicButton;
     6     JButton dontPanicButton;
     7     JButton blameButton;
     8     JButton mediaButton;
     9     JButton saveButton;
    10     
    11     public Crisis() {
    12         super("Crisis");
    13         setLookAndFeel();
    14         setSize(348, 128);
    15         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    16 
    17 //        2.GridLayout布局
    18         GridLayout grid = new GridLayout(2, 3);
    19         setLayout(grid);
    20         panicButton = new JButton("Panic");
    21         dontPanicButton = new JButton("Don't Panic");
    22         blameButton = new JButton("Blame Others");
    23         mediaButton = new JButton("Notify the Media");
    24         saveButton  = new JButton("save yourself");
    25         add(panicButton);
    26         add(dontPanicButton);
    27         add(blameButton);
    28         add(mediaButton);
    29         add(saveButton);
    30         setVisible(true);
    31     }
    32     
    33     private void setLookAndFeel() {
    34         try {
    35             UIManager.setLookAndFeel(
    36                     "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    37         } catch (Exception exc) {
    38             // ignore error
    39         }
    40     }
    41 
    42     public static void main(String[] arguments) {
    43         Crisis frame = new Crisis();
    44     }
    45 }
    View Code

    BorderLay管理器

      BorderLayout类也位于java.awt包中,它将容器中的组件放置在特定的位置,该位置有5个方位:东、西、南、北、中。

    BorderLayout管理器将组件放置到5个位置:其中4个位置由罗盘方向指定,另外一个由中心区域指定。当在该布局下添加组件时,add()方法会包含第2个参数,用于指示组件应该放置的位置。该参数应该是BorderLayout类的5个类变量之一:NORTH、SOUTH、EAST、WEST和CENTER。

      与GridLayout类相同,BorderLayout也会将所有可用空间都分配给组件。在周围放置4个边界组件后,余下的空间都分配给中央的组件,因此它通常是最大的。

     1 import java.awt.*;
     2 import javax.swing.*;
     3 
     4 public class Crisis extends JFrame {
     5     JButton panicButton;
     6     JButton dontPanicButton;
     7     JButton blameButton;
     8     JButton mediaButton;
     9     JButton saveButton;
    10     
    11     public Crisis() {
    12         super("Crisis");
    13         setLookAndFeel();
    14         setSize(348, 128);
    15         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    16         BorderLayout crisisLayout = new BorderLayout();
    17         setLayout(crisisLayout);
    18 
    19         panicButton = new JButton("Panic");
    20         dontPanicButton = new JButton("Don't Panic");
    21         blameButton = new JButton("Blame Others");
    22         mediaButton = new JButton("Notify the Media");
    23         saveButton  = new JButton("save yourself");
    24         add(panicButton, BorderLayout.NORTH);
    25         add(dontPanicButton, BorderLayout.SOUTH);
    26         add(blameButton, BorderLayout.EAST);
    27         add(mediaButton, BorderLayout.WEST);
    28         add(saveButton, BorderLayout.CENTER);
    29         setVisible(true);
    30     }
    31     
    32     private void setLookAndFeel() {
    33         try {
    34             UIManager.setLookAndFeel(
    35                     "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    36         } catch (Exception exc) {
    37             // ignore error
    38         }
    39     }
    40 
    41     public static void main(String[] arguments) {
    42         Crisis frame = new Crisis();
    43     }
    44 }
    View Code

    BoxLayout管理器

      BoxLayout类位于javax.swing包中,它可以将组件排列成一行或一列。

      使用该布局时,先创建一个放置组件的面板,然后再创建一个布局管理器,它带有2个参数:

      1.以框式布局组织的组件;

      2.BoxLayout.Y_AXIS指定垂直排列,BoxLayout.X_AXIS指定水平排列;

     1 import java.awt.*;
     2 import javax.swing.*;
     3 
     4 public class Crisis extends JFrame {
     5     JButton panicButton;
     6     JButton dontPanicButton;
     7     JButton blameButton;
     8     JButton mediaButton;
     9     JButton saveButton;
    10     
    11     public Crisis() {
    12         super("Crisis");
    13         setLookAndFeel();
    14         setSize(348, 128);
    15         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    16         JPanel pane = new JPanel();
    17         BoxLayout box = new BoxLayout(pane, BoxLayout.Y_AXIS);
    18         pane.setLayout(box);
    19         panicButton = new JButton("Panic");
    20         dontPanicButton = new JButton("Don't Panic");
    21         blameButton = new JButton("Blame Others");
    22         mediaButton = new JButton("Notify the Media");
    23         saveButton  = new JButton("save yourself");
    24         pane.add(panicButton);
    25         pane.add(dontPanicButton);
    26         pane.add(blameButton);
    27         pane.add(mediaButton);
    28         pane.add(saveButton);
    29         add(pane);
    30         
    31         setVisible(true);
    32     }
    33     
    34     private void setLookAndFeel() {
    35         try {
    36             UIManager.setLookAndFeel(
    37                     "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    38         } catch (Exception exc) {
    39             // ignore error
    40         }
    41     }
    42 
    43     public static void main(String[] arguments) {
    44         Crisis frame = new Crisis();
    45     }
    46 }
    View Code

    使用Insets将组件隔开

      Insets类位于java.awt包中,它有一个接受4个参数的构造函数:在容器上、下、左、右留出的空间。每个参数都以像素为单位,像素是定义框架大小时使用的度量单位。

    1     public Insets getInsets() {
    2         Insets squeeze = new Insets(60, 15, 10, 15);
    3         return squeeze;
    4     }
    View Code

     布局测试

      1 import java.awt.*;
      2 import javax.swing.*;
      3 
      4 public class LottoMadness extends JFrame {
      5     // set up row1
      6     JPanel row1 = new JPanel();
      7     ButtonGroup option = new ButtonGroup();
      8     JCheckBox quickpick = new JCheckBox("Quick Pick", false);
      9     JCheckBox personal  = new JCheckBox("Personal", true);
     10     // set up row2
     11     JPanel row2 = new JPanel();
     12     JLabel numbersLabel = new JLabel("Your picks: ", JLabel.RIGHT);
     13     JTextField[] numbers = new JTextField[6];
     14     JLabel winnersLabel = new JLabel("Winners: ", JLabel.RIGHT);
     15     JTextField[] winners = new JTextField[6];
     16     // set up row3
     17     JPanel row3 = new JPanel();
     18     JButton stop = new JButton("Stop");
     19     JButton play = new JButton("play");
     20     JButton reset = new JButton("Reset");
     21     // set up row4
     22     JPanel row4 = new JPanel();
     23     JLabel got3Label = new JLabel("3 of 6: ", JLabel.RIGHT);
     24     JTextField got3 = new JTextField("0");
     25     JLabel got4Label = new JLabel("4 of 6: ", JLabel.RIGHT);
     26     JTextField got4 = new JTextField("0");
     27     JLabel got5Label = new JLabel("5 of 6: ", JLabel.RIGHT);
     28     JTextField got5 = new JTextField("0");
     29     JLabel got6Label = new JLabel("6 of 6: ", JLabel.RIGHT);
     30     JTextField got6 = new JTextField("0");
     31     JLabel drawingsLabel = new JLabel("Drawings", JLabel.RIGHT);
     32     JTextField drawings = new JTextField("0");
     33     JLabel yearsLabel = new JLabel("Years: ", JLabel.RIGHT);
     34     JTextField years = new JTextField();
     35     
     36     public LottoMadness() {
     37         super("Lotto Madness");
     38         
     39         setSize(550, 400);
     40         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     41         GridLayout layout = new GridLayout(5, 1, 10, 10);
     42         setLayout(layout);
     43         
     44         FlowLayout layout1 = new FlowLayout(FlowLayout.CENTER, 10, 10);
     45         option.add(quickpick);
     46         option.add(personal);
     47         row1.setLayout(layout1);
     48         row1.add(quickpick);
     49         row1.add(personal);
     50         add(row1);
     51         
     52         GridLayout layout2 = new GridLayout(2, 7, 10, 10);
     53         row2.setLayout(layout2);
     54         row2.add(numbersLabel);
     55         for (int i = 0; i < 6; i++) {
     56             numbers[i] = new JTextField();
     57             row2.add(numbers[i]);
     58         }
     59         row2.add(winnersLabel);
     60         for (int i = 0; i < 6; i++) {
     61             winners[i] = new JTextField();
     62             winners[i].setEditable(false);
     63             row2.add(winners[i]);
     64         }
     65         add(row2);
     66         
     67         FlowLayout layout3 = new FlowLayout(FlowLayout.CENTER, 10, 10);
     68         row3.setLayout(layout3);
     69         stop.setEnabled(false);
     70         row3.add(stop);
     71         row3.add(play);
     72         row3.add(reset);
     73         add(row3);
     74         
     75         GridLayout layout4 = new GridLayout(2, 3, 20, 10);
     76         row4.setLayout(layout4);
     77         row4.add(got3Label);
     78         got3.setEditable(false);
     79         row4.add(got3);
     80         row4.add(got4Label);
     81         got4.setEditable(false);
     82         row4.add(got4);
     83         row4.add(got5Label);
     84         got5.setEditable(false);
     85         row4.add(got5);
     86         row4.add(got6Label);
     87         got6.setEditable(false);
     88         row4.add(got6);
     89         row4.add(drawingsLabel);
     90         drawings.setEditable(false);
     91         row4.add(drawings);
     92         row4.add(yearsLabel);
     93         years.setEditable(false);
     94         row4.add(years);
     95         add(row4);
     96         
     97         setVisible(true);
     98     }
     99     
    100     private static void setLookAndFeel() {
    101         try {
    102             UIManager.setLookAndFeel(
    103                     "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    104         } catch (Exception exc) {
    105             // ignore error
    106         }
    107     }
    108     
    109     public static void main(String[] arguments) {
    110         LottoMadness.setLookAndFeel();
    111         LottoMadness frame = new LottoMadness();
    112     }
    113 }
    View Code

         

  • 相关阅读:
    【JZOJ6271】【NOIP提高组A】锻造 (forging)
    【JZOJ6272】【NOIP提高组A】整除 (division)
    【JZOJ3397】【GDOI2014模拟】雨天的尾巴
    input绑定datapicker控件后input再绑定blur或者mouseout等问题
    解决每次打开office 2010显示正在配置的问题
    Ext JS treegrid 发生的在tree上增加itemclick 与在其它列上增加actioncolumn 发生事件冲突(event conflict)的解决办法
    Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法
    本地同时启动两个tomcat
    转: ExtJS中xtype一览
    web前端基础知识及快速入门指南
  • 原文地址:https://www.cnblogs.com/dulixiaoqiao/p/6487272.html
Copyright © 2011-2022 走看看