zoukankan      html  css  js  c++  java
  • Java--GUI编程(一)

    2020-04-11

    19:42:22

     GUI:图形用户界面(Graphical User Interface)

    今天开始进入了AWT的学习:万事如期而至

    进行窗口界面化首先需要一个Frame。

    Frame

    这个Frame是基本的窗口。

    frame中可以添加各种组件。eg:panel、button、TextArea、Label…

    首先尝试着做一个小窗口

    public class MyFrame extends Frame {
        //可能存在多个窗口,我们需要一个计数器
        static int id = 0;
        MyFrame(){}
        MyFrame(String title,Color color ,int x,int y ,int w ,int h){
            super("MyFrame"+ (id++));
            setResizable(false);
            setBackground(color);
            setBounds(x,y,w,h);
            setVisible(true);
        }
    }

    这是封装后的一个小窗口。

    上面也是基本的属性设置。

    Panel面板

    public class TestPanel {
        public static void main(String[] args) {
            Frame frame = new Frame();
            Panel panel = new Panel();
    
            frame.setLayout(null);
    
            frame.setBounds( 300,300,500,500);
            frame.setBackground(Color.GREEN);
    
            panel.setBounds(300,300,200,200);
            panel.setBackground(Color.RED);
    
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    int i = 0;
                    System.exit(i);
                }
            });
    
    
            frame.add(panel);
            frame.setVisible(true);
    
    
        }
    }

    现在到了最重要的一个point:

    三种布局管理器:

    1、流式布局:FlowLayout

    这是一种自动的布局的管理器:

    可以选动设置成靠左、居中、靠右 三种形式

    在这个布局中添加组件时,这个管理器都会自动的为你排布局面

    public class TestFlowLayout {
        public static void main(String[] args) {
            Frame frame = new Frame("FlowLayout");
            frame.setLayout(new FlowLayout(FlowLayout.CENTER));
    
            Button button1 = new Button("button1");
            Button button2 = new Button("button2");
            Button button3 = new Button("button3");
            Button button4 = new Button("button4");
            Button button5 = new Button("button5");
    
            frame.add(button1);
            frame.add(button2);
            frame.add(button3);
            frame.add(button4);
            frame.add(button5);
    
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
    
            frame.pack();
            frame.setVisible(true);
    
        }
    }

    2、东南西北中布局:BorderLayout

    这个布局管理器需要你自行的为你的组件分配到这个布局的各个位置。

    public class TestBordLayout {
        public static void main(String[] args) {
            Frame frame = new Frame();
            frame.setLayout(new BorderLayout());
            //东南西北中布局需要自行定义方向
    
            Button east = new Button("east");
            Button west = new Button("west");
            Button north = new Button("north");
            Button south = new Button("south");
            Button center = new Button("center");
    
            frame.add(east,BorderLayout.EAST);
            frame.add(west,BorderLayout.WEST);
            frame.add(north,BorderLayout.NORTH);
            frame.add(south,BorderLayout.SOUTH);
            frame.add(center,BorderLayout.CENTER);
    
            frame.pack();
            frame.setVisible(true);
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
        }
    }

    3、表格布局:GirdLayout

    这个布局管理器需要你自动的为你的组件分配到这个布局的各个位置。

    你可以自行的设置这个布局的行列数。

    public class TestGirdLayout {
        public static void main(String[] args) {
            Frame frame = new Frame();
    
            //表格布局  自动填充
            frame.setLayout(new GridLayout(2,3));
    
            Button east = new Button("east");
            Button west = new Button("west");
            Button north = new Button("north");
            Button south = new Button("south");
            Button center1 = new Button("center1");
            Button center2 = new Button("center2");
    
            frame.add(east );
            frame.add(west );
            frame.add(north );
            frame.add(south );
            frame.add(center1);
            frame.add(center2);
    
            frame.pack();
            frame.setVisible(true);
    
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosed(WindowEvent e) {
                    System.exit(0);
                }
            });
        }
    }

    最后的最后,我们来做一个练习题:

    用今天所学的做一个面板如图:

    public class Demo {
        public static void main(String[] args) {
            Frame frame = new Frame("Table!");
            frame.setLayout(new GridLayout(2,1));
            frame.setBounds(300,300,500,500);
            frame.setBackground(new Color(255, 223, 220));
    
    
            Panel p1 = new Panel(new BorderLayout());
            Panel p2 = new Panel(new GridLayout(2,1));
            Panel p3 = new Panel(new BorderLayout());
            Panel p4 = new Panel(new GridLayout(2,2));
    
            p1.add(new Button("1"),BorderLayout.EAST);
            p1.add(new Button("2"),BorderLayout.WEST);
            p2.add(new Button("3"));
            p2.add(new Button("4"));
            p1.add(p2,BorderLayout.CENTER);
    
            p3.add(new Button("5"),BorderLayout.EAST);
            p3.add(new Button("6"),BorderLayout.WEST);
            int i = 4;
            for (int i1 = 0; i1 < i; i1++) {
                p4.add(new Button( String.valueOf(i1 + 7)));
            }
            p3.add(p4,BorderLayout.CENTER);
    
            frame.add(p1);
            frame.add(p3);
    
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosed(WindowEvent e) {
                    System.exit(0);
                }
            });
            frame.setVisible(true);
    
        }
    }
  • 相关阅读:
    myslq的更新丢失实例
    特价版线程池ThreadPoolExecutor实现
    通过SCP实现Linux服务器和本地Win10机器的文件上传下载
    数据库连接池的一种实现方案
    JDBC的驱动注册浅析
    Mysql数据库的JDBC查询实例
    RabbitMQ的安装
    Rabbitmq—基础
    Datatable某一列转List
    js Jquery 数据移除元素/删除元素
  • 原文地址:https://www.cnblogs.com/richxan/p/12681901.html
Copyright © 2011-2022 走看看