• 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提供的方法

        

      

  • 相关阅读:
    numpy简单使用
    机器学习简介
    sklearn 使用以及数据集拆分&特征工程(特征提取&特征预处理)
    Flink处理函数
    全功能测试框架 Carina
    浅谈测试技术落地
    appium 2.0 beta版体验
    eBPF学习
    ACPI学习
    设置VF聚合网口
  • 原文地址:https://www.cnblogs.com/youqc/p/14500746.html
Copyright © 2020-2023  润新知