JavaSwing图形用户界面

本文详细介绍了JavaSwing图形用户界面的相关知识点,包括窗口、组件、容器、布局管理以及事件处理。重点讨论了事件源、监视器和处理事件的接口的概念,并提供了算术测试的示例。此外,还讲解了BorderLayout和GridLayout两种布局策略的使用。同时,提到了KeyEvent类在处理键盘事件中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图形用户界面

相关知识点

先前的博客已经对Swing进行过细致的描述,现在只是重新对知识点进行一个整理以及复习
Java Swing图形用户界面(20.4.25)
Java Swing窗口(20.4.26)
Java常用组件/容器与布局/计算机系统基础知识(20.4.27)
Java处理事件/ActionEvent事件/ASCII码/校验码/逻辑代数及逻辑运算/机器数的运算(20.4.28)
Java ItemEvent事件/总线的基本概念/中央处理单元(20.4.29)
Java DocumentEvent事件(20.4.30)
等等…

通过图形用户界面(Graphics User Interface,GUl),用户和程序之间可以方便地进行交互。Java包含了许多用来支持GUI设计的类,如按钮、菜单、列表、文本框等组件类,同时还包含窗口、面板等容器类。学习组件除了了解组件的属性和功能外,一个更重要的方面是学习怎样处理组件上发生的界面事件。在学习处理事件时,必须很好地掌握事件源监视器处理事件的接口这3个概念。

  • 事件源
    能够产生事件的对象都可以称为事件源,如文本框、按钮、下拉式列表等。也就是说,事件源必须是一个对象,而且这个对象必须是Java认为能够发生事件的对象。
  • 监视器
    我们需要一个对象对事件源进行监视,以便对发生的事件做出处理。事件源通过调用相应的方法将某个对象作为自己的监视器。
  • 处理事件的接口
    监视器负责处理事件源发生的事件。Java语言使用了接口回调技术设计了它的处理事件模式。事件源增加监视的方法:
    addXXXListener(XXXListener listener)//

其中的参数是一个接口,listener可以引用任何实现了该接口的类所创建的对象(监视器),当事件源发生事件时,接口listener立刻回调被类实现的接口中的某个方法。

算术测试的例子

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

public class myWindow extends JFrame {
    Teacher teacher;
    JButton jButtonGet;
    JButton jButtonAnswer;
    JTextField jTextField;
    JTextField jTextField2;
    JTextField jTextField3;
    JMenuBar jMenuBar;
    JMenu jMenu;
    JMenuItem jMenuItem;
    JMenuItem jMenuItem2;
    JLabel jLabel;
    JLabel jLabel2;

    public myWindow() {
        teacher = new Teacher();
        jTextField = new JTextField(5);
        jTextField2 = new JTextField(5);
        jTextField.setEditable(false);
        jTextField2.setEditable(false);
        jTextField3 = new JTextField(5);
        jLabel = new JLabel();
        jLabel2 = new JLabel();
        teacher.setMyWindow(this);
        setLayout(new FlowLayout());
        setBounds(400, 400, 500, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("算术测试");
        jMenuBar = new JMenuBar();
        jMenu = new JMenu("选择级别");
        jMenuItem = new JMenuItem("幼儿级别");
        jMenuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                JMenuItem source = (JMenuItem) actionEvent.getSource();
                teacher.setMax(source);
            }
        });
        jMenuItem2 = new JMenuItem("儿童级别");
        jMenuItem2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                JMenuItem source = (JMenuItem) actionEvent.getSource();
                teacher.setMax(source);
            }
        });
        jMenu.add(jMenuItem);
        jMenu.add(jMenuItem2);
        jMenuBar.add(jMenu);
        setJMenuBar(jMenuBar);
        jButtonGet = new JButton("获取题目");
        jButtonGet.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                teacher.getRandom();

            }
        });
        jButtonAnswer = new JButton("确认答案");
        jButtonAnswer.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                teacher.getAnswer();
            }
        });

        add(jButtonGet);
        add(jTextField);
        add(jLabel);
        add(jTextField2);
        add(new JLabel("="));
        add(jTextField3);
        add(jButtonAnswer);
        add(jLabel2);
        setVisible(true);
        validate();
    }
}
import javax.swing.*;
import java.util.Random;

public class Teacher {
    Random random;
    myWindow myWindow;
    int numberOne, numberTwo;
    int Max = 10;

    public void setMyWindow(Experiment_10.myWindow myWindow) {
        this.myWindow = myWindow;
    }

    public Teacher() {
    }

    public void setMax(JMenuItem jMenuItem) {
        if (jMenuItem == myWindow.jMenuItem) {
            Max = 10;
        } else if (jMenuItem == myWindow.jMenuItem2) {
            Max = 50;
        }
    }

    public void getRandom() {
        random = new Random();
        numberOne = random.nextInt(Max) + 1;
        numberTwo = random.nextInt(Max) + 1;
        double random = Math.random();
        if (random > 0.5) {
            myWindow.jLabel.setText("+");
        } else {
            myWindow.jLabel.setText("-");
        }
        myWindow.jTextField.setText(numberOne + "");
        myWindow.jTextField2.setText(numberTwo + "");
    }

    public void getAnswer() {
        String text = myWindow.jTextField3.getText();
        int answer = Integer.parseInt(text);
        if (answer == numberOne + numberTwo || answer == numberOne - numberTwo) {
            myWindow.jLabel2.setText("回答正确!");
        } else {
            myWindow.jLabel2.setText("回答错误!");
        }
    }
}
public class Example_1 {
    public static void main(String[] args) {
        myWindow myWindow = new myWindow();
    }
}

运行效果
在这里插入图片描述

相关知识点2

当把组件添加到容器中时,希望控制组件在容器中的位置,这就需要学习布局设计的知识。常用的布局类有java.awt包中的FlowLayout,BorderLayoutCardLayoutGridLayout和java.swing.border包中的BoxLayout

BorderLayout是一种简单的布局策略,如果一个容器使用这种布局,那么容器空间被省单地划分为东、西、南、北、中5个区域,中间的区域最大。每加入一个组件都应该指明把这个组件添加在哪个区域中,区域由BorderLayout中的静态常量CENTER、NORTH、SOUTH、WEST、EAST表示。

GridLayout是使用较多的布局编辑器,其基本布局策略是:把容器划分成若干行乘若干列的网格区域,组件就位于这些划分出来的小格中。GridLayout比较灵活,划分多少网格由程序自由控制,而且组件定位也比较精确

相关知识点3

用KeyEvent 类的public int getKeyCode()方法可以判断哪个键被按下、敲击或释放,getKeyCode方法返回一个键码值。用KeyEvent 类的public char getKeyChar()方法可以判断哪个键被按下、敲击或释放,getKeyChar()方法返回键上的字符。

CET4P215

  • nasty
  • fable
  • ethnic
  • deprive
  • enlighten
  • comply
  • fable
  • infrastructure
  • administration
  • whisky
  • broker
  • frost
  • emphasize
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值