1.swing基本概念与使用

1.简介:

  swing是目前java不可或缺的窗口工具组,在swing尚未推出之前,要编写一个java窗口程序必须使用awt的包。

  awt缺点:使用上没有弹性,例如无法任意地改变组件的外观,甚至想在一个按钮上添加团都是非常困难的

2.swing结构

  利用MVC的概念衍生而出。

  Model:存储组件数据的地方

  View:显示组件的外观

  Controller:处理用户在组件上的操作。并将改变后的数据存储到model上

3.swing常用的package

  

 

 

4.java窗口演进

  以前Java尚未推出Swing之前,要设计一个Java窗口程序,必须要通过AWT 组件。A W T组件虽然提供了一些构造窗口的基本需求,如文字字段(TextField)、复选框(CheckBox)-按钮(Button)、对话框(Dialog)^ 菜单(Menu)等等,但在使用上非常不方便且呆板。例如:我们无法改变按钮的形状,也无法在按钮上加上图标:于版面管理(Layout manager)的限制相当多,而对图形处理的支持也很少......................

5.swing主要包含:

  1.awt组件:旧有的窗口组件包

  2.swing组件:新的窗口组件包

  3.accessibility API:提供一种更先进的沟通界面:语音输入货触摸式屏幕

  4.java2DApi:提供更强大的图形处理函数

  5.支持Drag and Drop功能:windows上开两个窗口进行复制粘贴

6.Layout Managers

  1.swing中几乎所有的组件都是从JComponent衍生,也就是说所有的组件都是由纯java编写而成。

  2.JFrame、JDialog、JWindow与JApplet这个四个组件统称为最上层。其余组件必须依附在这四组件上才能显示

  3.RootPaneContainer:

  

 

   4.Layout Manager种类:

    1.BorderLayout

    2.FlowLayout

    3.GridLayout

    4.CardLayout

    5.GridBagLayout

    6.BoxLayout

    swing中还有ScrollPaneLayout、ViewportLayout、OverlayLayout,这三个系统会自行管理,大部分情况用户不                 需要知道怎么使用。

7.BorderLayout的使用

  1.BorderLayout将版面分为东西南北中五个版面,可以将组件放置到这五个区域中。

  2.demo

public class BorderLayoutDemo {
    
    public BorderLayoutDemo() {
        JFrame frame=new JFrame();
        Container contentPane=frame.getContentPane();
        contentPane.setLayout(new BorderLayout());
        contentPane.add(new JButton("EAST"),BorderLayout.EAST);
        contentPane.add(new JButton("WEST"),BorderLayout.WEST);
        contentPane.add(new JButton("SOUTH"),BorderLayout.SOUTH);
        contentPane.add(new JButton("NORTH"),BorderLayout.NORTH);
        contentPane.add(new JLabel("CENTER",JLabel.CENTER),BorderLayout.CENTER);
        frame.setTitle("BorderLayout");
        frame.pack();            //根据窗口里面的布局及组件的preferedSize来确定frame的最佳大小
        frame.setVisible(true);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    public static void main(String[] args) {
        BorderLayoutDemo layout=new BorderLayoutDemo();
    }
}

8.FlowLayout的使用

  1.将组件一个接着一个往右一直排列下去。若组件个数太多,无法在同一行显示时,会自动将组件往下一行排列。

  2.构造函数

    

 

   3.demo

    

public class FlowLayoutDemo {

    public FlowLayoutDemo() {
        JFrame frame=new JFrame();
        Container contentPane = frame.getContentPane();
        contentPane.setLayout(new FlowLayout());
        contentPane.add(new JButton("first"));
        contentPane.add(new JButton("second"));
        contentPane.add(new JButton("third"));
        contentPane.add(new JButton("fourth"));
        contentPane.add(new JButton("fifth"));
        contentPane.add(new JButton("this id the last button"));
        frame.setTitle("FlowLayout");
        frame.setSize(new Dimension(200, 200));
        frame.setVisible(true);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                // TODO Auto-generated method stub
                System.exit(0);
            }
        });
    }
    public static void main(String[] args) {
        FlowLayoutDemo f=new FlowLayoutDemo();
    }
}

9.GridLayout

  1.GridLayout比FlowLayout多了行和列的设置,也就是说要先设置GridLayout共有几行几列,然后添加进去的组件会先填完第一行再第二行

  2.构造函数

    

 

   3.demo

    

public class GridLayoutDemo {

    public GridLayoutDemo() {
        JFrame f=new JFrame();
        Container contentPane= f.getContentPane();
        contentPane.setLayout(new GridLayout(7, 1));
        contentPane.add(new JButton("first"));
        contentPane.add(new JButton("first1"));
        contentPane.add(new JButton("first2"));
        contentPane.add(new JButton("first3"));
        contentPane.add(new JButton("first4"));
        contentPane.add(new JButton("first5"));
        contentPane.add(new JButton("first6"));
        f.setVisible(true);
        f.setTitle("GridLayout");
        f.pack();
        f.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    public static void main(String[] args) {
        new GridLayoutDemo();
    }
}

10.CardLayout

  1.如果很多卡片叠在一起,每次只能看到其中一张,但是可以任意抽出其中一张。

  2.构造函数

    

 

   3.demo

    

public class CardLayoutDemo implements ActionListener{
    JPanel p1,p2,p3,p4;
    int i=1;
    JFrame f;
    
    public CardLayoutDemo() {
        f=new JFrame();
        Container contentPane= f.getContentPane();
        contentPane.setLayout(new CardLayout(2, 1));
        
        p1 = new JPanel();
        JButton button=new JButton("sss");
        button.addActionListener(this);
        p1.add(button);
        contentPane.add(p1);
        
        p2 = new JPanel();
        p2.setLayout(new FlowLayout());
        p2.add(new JButton("1"));
        p2.add(new JButton("2"));
        p2.add(new JButton("3"));
        
        p3 = new JPanel();
        p3.setLayout(new GridLayout(3, 1));
        p3.add(new JButton("11"));
        p3.add(new JButton("22"));
        p3.add(new JButton("33"));
        contentPane.add(p3);
        
        p4 = new JPanel();
        p4.setLayout(new CardLayout());
        p4.add("one",p2);
        p4.add("two",p3);
        ((CardLayout)p4.getLayout()).show(p4, "one");
        contentPane.add(p4);
        f.setTitle("CardLayoutDemo");
        f.pack();
        f.setVisible(true);
        f.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                // TODO Auto-generated method stub
                System.exit(0);
            }
        });
    }
    public static void main(String[] args) {
        new CardLayoutDemo();
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        switch (i) {
        case 1:
            ((CardLayout)p4.getLayout()).show(p4, "two");
            break;
        case 2:
            ((CardLayout)p4.getLayout()).show(p4, "one");
            break;
        }
        i++;
        if(i==3){
            i=1;
        }
        f.validate();//是验证frame中的所有组件,并不会调整frame的大小.
    }
}

11.GridBagLayout的使用

  1.GridBagLayout是java中最有弹性但也是最复杂的一种版面管理器,GridBagLayout能实现其他布局不能设置组件的位置和大小

  2.构造函数:GridBagLayout必须配合GridBagConstraints才能达到设置的效果

    

 12.BoxLayout的使用

  1.提供多样化的版面管理方式,只有两种排列方式:水平和垂直,使用BoxLayout提供的两个常熟X_AXIS,Y_AXIS表示水平和垂直排列。当水平组件不登高,系统会使所有的组件域最高组件登高。若将组件排在同一行,超过container宽度,不会自动换行,需要自行处理。

  2.构造函数

    

 

   3.Box Container构造函数

    

 

   4.Box提供4种透明组件:

    Glue、当Glue插入在两组件之间,会将两组件挤到最左与最右(或最上与最下),透明的Glue会占满整个中间空间。 

    Strut、设置两个组件间间隔差距多少像素

    Rigid、设置两个组件二维间隔差距多少像素限制

    Filler、跟Rigid相同,但是可以指定最大、最小、较佳的长宽大小。

  

 

   5.Box提供的方法

    

 

 

  

 

posted @ 2021-03-08 17:08  youqc  阅读(738)  评论(0编辑  收藏  举报