GUI编程-Java

GUI编程——Java(1)

GUI是什么?

  • 图形用户接口编程
  • 图形用户界面

核心技术有哪些?

  • AWT
  • Swing

组件

  • 窗口 frame
  • 面板 Panel
  • 弹窗 Dialog
  • 文本框 TextField
  • 列表框 List
  • 按钮 Button
  • 监听 ~Listion
  • 鼠标
  • 键盘
  • ...

能干啥?

  • 了解MVC架构中的监听

1.AWT(Abstract Windows tools)抽象窗口工具

1.1AWT简介

1.包括多种类和接口!放置于java.awt包中

2.基本元素:Frame Panel Dialog Button TextField TextArea Lable...

1.2组件和容器

1.Frame窗口

package com.Zm.AWT;

import java.awt.*;

public class Work02 {
    public static void main(String[] args) {
        //Frame窗口
        //第一步创建一个Frame对象
        Frame frame = new Frame("我的Frame");
        /* public Frame() throws HeadlessException {
                this("");//可传入参数表示title 显示在窗口的上面
            }//方法源码
        */

        //设置窗口的基本格式
        //1.设置窗口位置,窗口大小
        frame.setBounds(100,100,400,300);
        //2.设置窗口背景,传参为Color对象 使用RGB编码表示颜色,可设置透明度
        frame.setBackground(new Color(240, 120, 145));
        //3.显示窗口 setVisible默认为false表示不显示窗口
        frame.setVisible(true);

    }
}

经过上述代码可以创建出一个窗口,但是窗口不可以关闭也没有任何其他组件!

2.Panel面板

解决问题,窗口没有组件,添加基础组件Panel面板

package com.Zm.AWT;

import java.awt.*;

public class Work02 {
    public static void main(String[] args) {
        //Frame窗口
        //第一步创建一个Frame对象
        Frame frame = new Frame("我的Frame");
        /* public Frame() throws HeadlessException {
                this("");//可传入参数表示title 显示在窗口的上面
            }//方法源码
        */

        //设置窗口的基本格式
        //1.设置窗口位置,窗口大小
        frame.setBounds(100,100,400,300);
        //2.设置窗口背景,传参为Color对象 使用RGB编码表示颜色,可设置透明度
        frame.setBackground(new Color(240, 120, 145));
        //3.设置布局
        frame.setLayout(null);

        //添加面板Panel
        //创建Panel对象
        Panel panel = new Panel();
        /*  public Panel() {
               this(new FlowLayout()); //方法源码,Panel默认属性有一个布局为FlowLayout流水式布局
            }
        * */

        //设置Panel基本格式,同Frame,位置相对于Frame
        panel.setBounds(100,50,100,100);
        panel.setBackground(new Color(244, 176, 49));

        //添加Panel到Frame中
        frame.add(panel);
        

        //4.显示窗口 setVisible默认为false表示不显示窗口
        frame.setVisible(true);
    }
}

添加基础组件Panel后可以显示一个Panel在窗口上,Panel相当于一个容器,当要对窗口进行复杂布局时都是对多个Panel进行布局组合而成,Panel不可或缺。

3.布局管理器

布局是对Frame窗口和Panel都有的一种设置,包括三种基础布局:流式布局,东南西北中布局,表格布局。

还有一种绝对布局,即null,也就通过分析绝对位置进行放置的一种布局格式

3.1流式布局
package com.ZM.lesson1;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestFlowLayout {
    public static void main(String[] args) {
        Frame frame = new Frame("流式布局");

        //设置一组按钮
        Button button1 = new Button("button1");
        Button button2 = new Button("button2");
        Button button3 = new Button("button3");

        //设置流式布局
        frame.setLayout(new FlowLayout());//默认布局
        //frame.setLayout(new FlowLayout(FlowLayout.LEFT));//布局在左
        //frame.setLayout(new FlowLayout(FlowLayout.RIGHT));//布局在右

        //设置弹窗的位置和大小(设在中间)
        frame.setBounds(500,100,500,500);
        //设置窗口颜色
        frame.setBackground(new Color(35, 195, 182));
        //添加按钮
        frame.add(button1);
        frame.add(button2);
        frame.add(button3);

        frame.setVisible(true);
    }
}
3.2东南西北中布局
package com.ZM.lesson1;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestBorderLayout {
    public static void main(String[] args) {
        Frame frame = new Frame("东西南北中");

        Button east = new Button("east");
        Button west = new Button("west");
        Button south = new Button("south");
        Button north = new Button("north");
        Button center = new Button("center");

        //设置弹窗的位置和大小(设在中间)
        frame.setBounds(500,100,500,500);
        //设置窗口颜色
        frame.setBackground(new Color(35, 80, 195));
        frame.add(east,BorderLayout.EAST);
        frame.add(west,BorderLayout.WEST);
        frame.add(south,BorderLayout.SOUTH);
        frame.add(north,BorderLayout.NORTH);
        frame.add(center,BorderLayout.CENTER);

        frame.setVisible(true);

    }
}
3.3表格布局
package com.ZM.lesson1;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestGridLayout {
    public static void main(String[] args) {
        Frame frame = new Frame("表格");

        Button btn1 = new Button("btn1");
        Button btn2 = new Button("btn2");
        Button btn3 = new Button("btn3");
        Button btn4 = new Button("btn4");
        Button btn5 = new Button("btn5");
        Button btn6 = new Button("btn6");

        //设置弹窗的位置和大小(设在中间)
        frame.setBounds(500,100,500,500);
        //设置表格--->三行两列
        frame.setLayout(new GridLayout(2,3));

        frame.add(btn1);
        frame.add(btn2);
        frame.add(btn3);
        frame.add(btn4);
        frame.add(btn5);
        frame.add(btn6);
        
        frame.setVisible(true);
    }
}

4.监听事件

窗口到现在为止都没有关闭功能,需要将窗口正常关闭就需要监听事件,监听事件又可以针对窗口Frame,鼠标Mouse,键盘Key...

 //加入一个按钮的监听事件
        Button button = new Button("1");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println(e.getActionCommand());
            }
        });
        panel.add(button);

  //添加鼠标监听事件 使用适配器方式而不是全写Listener中的全部方法
        frame.addMouseListener(new MouseAdapter() {
            /**
             * {@inheritDoc}
             *
             * @param e
             */
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                System.out.println("Mouse Clicked");
            }
        });

 //添加键盘监听事件
        panel.addKeyListener(new KeyAdapter() {
            /**
             * Invoked when a key has been pressed.
             *
             * @param e
             */
            @Override
            public void keyPressed(KeyEvent e) {
                System.out.println(e.getKeyChar());
            }
        });

 //添加关闭窗口的监听事件 使用适配器方式而不是全写WindowsListener中的全部方法
        frame.addWindowListener(new WindowAdapter() {
            /**
             * Invoked when a window is in the process of being closed.
             * The close operation can be overridden at this point.
             *
             * @param e
             */
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                System.exit(0);
            }
        });

自此,监听事件完成,窗口可以正常关闭,还有其他窗口监听事件,鼠标监听事件等等,不一一赘述。

上一篇:css button 按压效果和内部阴影


下一篇:ZOJ3781. Paint the Grid Reloaded