JAVA-GUI编程

本文详细介绍了GUI编程的基础,包括AWT的窗口、面板、布局和事件监听,以及Swing带来的轻量级组件和跨平台特性,如JFrame、JPanel、JButton和鼠标键盘事件处理。通过实例演示了如何创建和定制图形用户界面。
摘要由CSDN通过智能技术生成

JAVA-GUI编程

**什么是GUI? **

GUI图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。

注意:GUI的核心是:AWT和SWING

1. 什么是AWT技术

AWT(Abstract Window Toolkit)抽象窗口工具包
特点:

  • AWT是重量级组件,因为用了大量的Windows函数
  • AWT只能在Windows平台下执行
  • 相比于Swing,AWT的代码较少且执行速度更快

Java.awt包的结构:
在这里插入图片描述

AWT中事件类的继承关系:
在这里插入图片描述

1.容器

1,窗口Frame

public class TestFrame {
    public static void main(String[] args) {
        Frame frame = new Frame("Java图像界面窗口");
        //设置窗口大小
        frame.setSize(400,400);
        //弹出的初始位置
        frame.setLocation(200,200);
        //设置背景颜色  Color
        frame.setBackground(new Color(85, 150, 68));
        //设置大小固定
        frame.setResizable(false);
        //需要设置可见性  ,没有设置将不会出现窗口
        frame.setVisible(true);
    }
}

注意:此时窗口不会关闭,因为还没有设置

2,面板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);   // x,y:窗口位置
        frame.setBackground(new Color(40, 161, 35));
        //panel设置坐标,相对于frame
        panel.setBounds(50,50,400,400); //设置画板位置大小
        panel.setBackground(new Color(193, 15, 60));//设置画板颜色
        frame.add(panel);     //将画板添加到窗口中
        frame.setVisible(true);
        //监听事件,监听窗口关闭事件  System.exit(0)
        //适配器模式 :
        frame.addWindowListener(new WindowAdapter() {
            //窗口点击关闭的时候需要做的事情
            @Override
            public void windowClosing(WindowEvent e) {
                //结束程序
                System.exit(0);
            }
        });
    }
}

注意:Panel必须添加到容器中

2.布局编辑器

(1),流式布局 FlowLayout

分左中右布局,默认是居中

Frame frame = new Frame();
        //组件-按钮
        Button button1 = new Button("button1");
        Button button2 = new Button("button2");
        Button button3 = new Button("button3");
        //设置为流式布局
        frame.setLayout(new        FlowLayout(FlowLayout.RIGHT));//将三个按钮放在窗口的最右边
        frame.setSize(200,200);
        //把按钮添加上去
        frame.add(button1);
        frame.add(button2);
        frame.add(button3);

(2),东南西北中布局 BorderLayout

既东南西北中四个方向布局

Panel p1=new Panel(new BorderLayout());
p1.add(new Button("east"),BorderLayout.EAST); p1.add(new Button("north"),BorderLayout.WEST);
p1.add(new Button("west"),BorderLayout.EAST);
p1.add(new Button("south"),BorderLayout.WEST);
p1.add(new Button("cent"),BorderLayout.center);

(3),表格布局 GridLayout

Panel p1=new Panel(new GridLayout(3,2));
//布局是两行一列

(4),绝对布局Container.setLayout()

硬性指定组件在容器中的位置和大小,可以使用绝对坐标的方式来指定组件的位置

public class Demo2 extends JFrame{
	public Demo2() {
		setBounds(100,100,250,150);//设置窗体坐标和大小
		setDefaultCloseOperation(EXIT_ON_CLOSE);//设置窗体关闭规则,关闭窗口时关闭程序
		Container c=getContentPane();//创建容器对象
		c.setLayout(null);//使该窗体取消布局管理器设置
		JButton b1=new JButton("按钮1"),b2=new JButton("按钮2");//创建按钮
		b1.setBounds(10, 30, 80, 30);//设置按钮的位置与大小
		b2.setBounds(60, 70, 100, 20);
		c.add(b1);//将按钮添加到容器中
		c.add(b2);
		setVisible(true);//设置窗体为可见
	}
	public static void main(String[] args) {
		new Demo2();
	}
}

3.事件监听

1,窗口监听:实现窗口的关闭,激活等监听

public class TestWindow {
    public static void main(String[] args) {
        new WindowFrame();
    }
}
class WindowFrame extends Frame{
    public WindowFrame(){
        setBackground(Color.blue);
        setBounds(100,100,200,200);
        setVisible(true);
        //addWindowListener(new MyWindowListener());
        this.addWindowListener(
                //匿名内部类
            new WindowAdapter() {
                //关闭窗口
    @Override
    public void windowClosing(WindowEvent e) {
       System.out.println("windowClosing");
               System.exit(0);  
                }
                //激活窗口
     @Override
       public void windowActivated(WindowEvent e) {
                    WindowFrame source = (WindowFrame) e.getSource();
                    source.setTitle("被激活了");//被激活后窗口的抬头
                    System.out.println("windowActivated");
                }
            }
        );
    }
}

2,鼠标监听事件

public class TestMouseListener {
    public static void main(String[] args) {
        new MyFrame("画图");
    }
}
//自己的类
class MyFrame extends Frame{
    //画画需要画笔,需要监听鼠标当前的位置,需要集合来存储这个点
    ArrayList points;
    public MyFrame(String title) {
        super(title);
        setBounds(200,200,400,300);
        //存鼠标点击的点
        points = new ArrayList<>();
        setVisible(true);
        //鼠标监听器,正对这个窗口
        this.addMouseListener(new MyMouseListener());
    }
    @Override
    public void paint(Graphics g) {
        //画画,监听鼠标的事件
        Iterator iterator = points.iterator();
        while (iterator.hasNext()){
           Point point = (Point) iterator.next();
           g.setColor(Color.BLUE);
           g.fillOval(point.x,point.y,10,10);
    }
    }
    //添加一个点到界面上
    public void addPaint(Point point){
        points.add(point);
    }
    //适配器模式
    private class MyMouseListener extends MouseAdapter{
        //鼠标 按下,弹起,按住不放
        @Override
        public void mousePressed(MouseEvent e) {
            MyFrame frame = (MyFrame) e.getSource();
            //这个我们点击的时候,就会在界面上产生一个点!画
            //这个点就是鼠标的点;
            frame.addPaint(new Point(e.getX(),e.getY()));
            //每次点击鼠标都需要重新画一遍
            frame.repaint();//刷新   30帧  60帧
        }
    }
}

3,键盘监听事件

public class TestKeyListener {
    public static void main(String[] args) {
        new KeyFrame();
    }
}
class KeyFrame extends Frame{
    public KeyFrame(){
        setBounds(1,2,300,400);
        setVisible(true);
        this.addKeyListener(new KeyAdapter() {
            //键盘按下
            @Override
            public void keyPressed(KeyEvent e) {
                //获得键盘下的键是哪一个,当前的码
                int keyCode = e.getKeyCode(); //不需需要去记录这个数值,直接使用静态属性 VK_XXX
                System.out.println(keyCode);
                if (keyCode == KeyEvent.VK_UP) {
                    System.out.println("你按下了上键");
                }
                //根据按下不同操作,产生不同结果;
            }
        });
    }
}

4,键盘监听事件

public class TestText01 {
    public static void main(String[] args) {
        //启动!
        new MyFrame();
    }
}
class MyFrame extends Frame{
    public MyFrame(){
        TextField textField = new TextField();
        add(textField);
        //监听这个文本框输入的文字
        MyActionListener2 myActionListener2 = new MyActionListener2();
        //按下enter 就会触发这个输入框的事件
        textField.addActionListener(myActionListener2);
        //设置替换编码
        textField.setEchoChar('*');//输入后被替换为*
        setVisible(true);
        pack();
    }
}
class MyActionListener2 implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        TextField field = (TextField) e.getSource();     //获得一些资源,返回的一个对象
        System.out.println(field.getText()); //获得输入框的文本
        field.setText(""); //null  ""
    }
}

2.Swing技术

swing和awt 的使用方式基本相同 SwingSwing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT。它们是JFC的一部分。它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台上使用JAVA支持的任意面板。轻量级组件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。

JFrame – java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。
**
JPanel** – Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing 包中,可以进行嵌套,功能是对窗体中具有相同逻辑功能的组件进行组合,是一种轻量级容器,可以加入到JFrame窗体中。。

JLabel – JLabel 对象可以显示文本、图像或同时显示二者。可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处对齐。默认情况下,标签在其显示区内垂直居中对齐。默认情况下,只显示文本的标签是开始边对齐;而只显示图像的标签则水平居中对齐。

JTextField –一个轻量级组件,它允许编辑单行文本。

JPasswordField – 允许我们输入了一行字像输入框,但隐藏星号(*) 或点创建密码(密码)

JButton – JButton 类的实例。用于创建按钮类似实例中的 “Login”。

2.1鼠标监听

public class TestMouseLisenter {
    public static void main(String[] args) {
        new MouseFrame("画花");
    }
}

//自己的类
class MouseFrame extends Frame{
    ArrayList points;
    //画花需要画笔,需要监听鼠标的位置,需要用集合来存
    public MouseFrame(String title){
        super(title);
        setBounds(200,200,400,300);
        //存鼠标点击这个点
        points = new ArrayList<>();
        //鼠标监听器
        this.addMouseListener(new MyMouseListener());
        setVisible(true);
        //关闭界面
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }

    @Override
    public void paint(Graphics g) {
        //画画,监听鼠标事件
        Iterator iterator = points.iterator();
        while (iterator.hasNext()){
            Point point = (Point)iterator.next();
            g.setColor(Color.green);
            g.fillOval(point.x,point.y,10,10);
        }
    }
    //添加一个点
    public void addPoint(Point point){
        points.add(point);
    }

    /*
    采用了适配器模式
    因为 MouseLisenter是一个接口,不需要实现里边的全部接口
     */
    private class MyMouseListener extends MouseAdapter {
        //鼠标的事件有,按下、弹起、按住不放
        @Override
        public void mousePressed(MouseEvent e) {
            MouseFrame source =(MouseFrame)e.getSource();
            //这个点我们在点击时,就会在界面上
            //这个点就是鼠标上的点
            source.addPoint(new Point(e.getX(),e.getY()));
            //每次重新画一遍,就是刷新
            source.repaint();
        }
    }
}

2.2,弹窗


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestDialog extends JFrame {
    public TestDialog() {
        this.setVisible(true);
        this.setBounds(100,100,500,300);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        //JFrame 放东西,容器
        Container container = this.getContentPane();
        container.setBackground(new Color(112, 179, 91));
        container.setLayout(null);

        //按钮
        JButton jb = new JButton("点击弹出一个对话框");
        jb.setBounds(30,30,200,100);

        //当点击这个按钮时弹出一个对话框
        jb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new MyDialog();
            }
        });

        container.add(jb);
    }

    public static void main(String[] args) {
        new TestDialog();
    }
}

//弹出的对话框
class MyDialog extends JDialog {
    public MyDialog() {
        this.setVisible(true);
        this.setBounds(100,100,500,500);

        Container contentPane = this.getContentPane();
        contentPane.setLayout(null);

        JLabel label = new JLabel("Java");
        label.setBounds(100,100,200,100);
        label.setFont(new Font("黑体",2,20));
        contentPane.setBackground(Color.red);
        contentPane.add(label);
    }
}

2.3、标签(Icon和ImageIcon)



public class TestImageIcon extends JFrame {

    public TestImageIcon() {
        JLabel label = new JLabel("ImageIcon");
        //当前这个类下边的图片地址
        URL url = TestImageIcon.class.getResource("3.jpg");

        ImageIcon icon = new ImageIcon(url);
        label.setIcon(icon);
        //居中
        label.setHorizontalAlignment(SwingConstants.CENTER);

        Container contentPane = getContentPane();
        contentPane.add(label);
        contentPane.setBackground(new Color(170, 255, 179));

        setBounds(100,100,500,400);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new TestImageIcon();
    }
}

2.4、JScroll面板


public class TestJScrollDemo extends JFrame {
    public TestJScrollDemo(){
        Container contentPane = this.getContentPane();

        //文本域
        TextArea textArea = new TextArea(30,100);
        textArea.setText("java");

        //滑动面板
        JScrollPane scrollPane = new JScrollPane(textArea);
        contentPane.add(scrollPane);

        setBounds(100,100,500,400);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    }

    public static void main(String[] args) {
       new TestJScrollDemo();
    }
}

2.5、JButton(单选框、复选框)

2.5.1、单选框

在这里插入图片描述



public class TestJButton extends JFrame {
    public TestJButton() {
        Container contentPane = this.getContentPane();

        //单选框
        JRadioButton rediobutton1 = new JRadioButton("rediobutton1");
        JRadioButton rediobutton2 = new JRadioButton("rediobutton2");
        JRadioButton rediobutton3 = new JRadioButton("rediobutton3");

        //由于单选框只能选一个,分组,一个组里边只选一个
        ButtonGroup buttonGroup = new ButtonGroup();
        buttonGroup.add(rediobutton1);
        buttonGroup.add(rediobutton2);
        buttonGroup.add(rediobutton3);

        contentPane.add(rediobutton1,BorderLayout.NORTH);
        contentPane.add(rediobutton2,BorderLayout.CENTER);
        contentPane.add(rediobutton3,BorderLayout.SOUTH);

        setVisible(true);
        setSize(400,200);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }


    public static void main(String[] args) {
        new TestJButton();
    }
}

2.5.2、复选框

在这里插入图片描述



public class TestJButton extends JFrame {
    public TestJButton() {
        Container contentPane = this.getContentPane();

        //复选框
        JCheckBox checkBox1 = new JCheckBox("checkBox1");
        JCheckBox checkBox2 = new JCheckBox("checkBox2");
        JCheckBox checkBox3 = new JCheckBox("checkBox3");

        contentPane.add(checkBox1,BorderLayout.NORTH);
        contentPane.add(checkBox2,BorderLayout.CENTER);
        contentPane.add(checkBox3,BorderLayout.SOUTH);

        setVisible(true);
        setSize(400,200);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }


    public static void main(String[] args) {
        new TestJButton();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值