JavaSE相关概念(13)——GUI

2023-12-24 18:01:34

一、概述

? ? ? 到目前为止,我们编写的都是基于控制台输入的程序,操作使用非常不直观;

? ? ? GUI(Graphical User Interface)即图形用户界面,是指采用图形方 式显示的用户界面,与早期计算机使用的命令行界面相比,图形界面对 于用户来说在视觉上更易于接受。

swing概述

  • swing 是一个为Java设计的GUI工具包javax.swing,该包中包括了图形用户界面 的各种组件支持。
  • 一个 Java 的图形界面,由各种不同类型的“元素”组成,这些“元素”被称为 组件(Component)。
  • swing中的组件可以分为两大类:容器(如窗口,对话框,面板)和功能组件(如按钮,输 入框,菜单等).
  • 它们的区别主要是在概念上的。因为每个容器也都是组件。
  • 容器是一种可以包含组件的特殊组件。

二、容器组件

? ? ? 功能组件不能独立地显示出来,必须将组件放在一定的容器(container)中才 可以显示出来。容器可以容纳多个组件,通过调用容器的add(Component comp)方法向容 器中添加组件。窗口(JFrame)和面板(JPanel)是最常用的两个容器。

1.JFrame(窗口)

? ? ? 我们的类可以直接继承该类,实现窗口制作,类似于之前继承异常类,一般情况下要自定义构造方法,此时每创建一个该类对象,则创建了一个窗口。

常用方法

  1. setTitle(String title):设置窗口的标题。

  2. setSize(int width, int height):设置窗口的大小。

  3. setLocation(int x, int y):设置窗口的位置。

  4. setResizable(boolean resizable):设置窗口是否可调整大小。

  5. setDefaultCloseOperation(int operation):设置窗口关闭时的操作。

  6. getContentPane():返回内容面板。

  7. add(Component comp):添加组件。

  8. setVisible(boolean visible):设置窗口是否可见。

  9. pack():自适应窗口大小。

  10. setLayout(LayoutManager mgr):设置布局管理器。

  11. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE):设置窗口关闭时的操作为退出程序。

  12. remove(Component comp):移除组件。

  13. setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE):设置窗口关闭时的操作为销毁窗口并释放资源。

  14. setJMenuBar(JMenuBar menubar):设置菜单栏。

  15. setSize(Dimension d):设置窗口的大小。

  16. setPreferredSize(Dimension preferredSize):设置窗口的首选大小。

  17. setBackground(Color color):设置窗口的背景颜色。

注意点
  • setVisible(boolean visible):该方法一般放在构造方法最后一行
  • JFrame的setDefaultCloseOperation(int operation)方法可以设置窗口关闭时的操作,operation属性的可选值有以下四个:
  • (1)JFrame.EXIT_ON_CLOSE:关闭窗口时退出程序;
  • (2)JFrame.HIDE_ON_CLOSE:关闭窗口时隐藏窗口。
  • (3)JFrame.DISPOSE_ON_CLOSE:关闭窗口时销毁窗口并释放资源。
  • (4)JFrame.DO_NOTHING_ON_CLOSE:关闭窗口时什么也不做。
  • getContentPane()方法的好处是,可以将组件添加到内容面板的默认布局管理器中,而不是添加到顶层容器的默认布局管理器中。
    

代码展示

import javax.swing.*;
import java.awt.*;

public class MyFrame extends JFrame {
    public MyFrame() throws HeadlessException {
        this.setTitle("我是窗口的标题");
        this.setSize(400,400);
        this.setLocation(200,400);
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 创建按钮
        JButton button = new JButton("Click me");
        // 获取内容面板
        Container contentPane = getContentPane();
        // 在内容面板上添加按钮
        contentPane.add(button);
        //也可以使用this,add(button);
        //this.pack();
        this.setBackground(Color.BLUE);
        this.setVisible(true);

    }

    public static void main(String[] args) {
        MyFrame frame = new MyFrame();
    }
}

输出结果:里面的那个小窗口

?2.Jpanel(面板)

? ? ? 轻量级的容器,可添加其他组件,也可以设置布局(布局嵌套),可继承

构造方法

  • JPanel()==》创建一个空面板
  • JPanel(LayoutManaer layout)==》创建带有指定布局的面板

常用方法

JPanel是Swing中一个常用的容器组件,它继承自JComponent类,可以用来包含其他的组件。

以下是JPanel常用的方法:

  1. add(Component comp): 向面板中添加组件。

  2. remove(Component comp): 从面板中移除组件。

  3. setLayout(LayoutManager manager): 设置面板的布局管理器。

  4. setOpaque(boolean isOpaque): 设置面板是否不透明。

  5. setBackground(Color color): 设置面板的背景颜色。

  6. getSize(): 获取面板的大小。

  7. setLocation(int x, int y): 设置面板在父容器中的位置。

  8. setVisible(boolean visible): 设置面板是否可见。

  9. setEnabled(boolean enabled): 设置面板是否可用。

  10. setPreferredSize(Dimension preferredSize): 设置面板的首选大小。

  11. getComponent(int index): 获取指定索引位置的组件。

  12. getComponents(): 获取面板中所有的组件。

  13. getLayout(): 获取面板的布局管理器。

  14. setBorder(Border border): 设置面板的边框。

  15. revalidate(): 重新布局面板中的组件。

  16. repaint(): 重新绘制面板。

代码展示

import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;

public class MyFrame extends JFrame {
    public MyFrame() throws HeadlessException {
        // 修改标题
        this.setTitle("My Frame");
        this.setSize(400,400);
        this.setLocation(200,400);
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new GridLayout(2,1));
        // 创建按钮
        JButton button = new JButton("Click me");
        JPanel jPanel = new JPanel();
        // 修改按钮文本
        button.setText("Press me");
        // 获取内容面板
        Container contentPane = getContentPane();
        // 在内容面板上添加按钮
        jPanel.add(button);
        jPanel.setSize(200,200);
        contentPane.add(jPanel);
        //this.pack();
        // 修改背景颜色
        contentPane.setBackground(new Color(189, 215, 238));

        JPanel panel = new JPanel();
        // 修改背景颜色
        panel.setBackground(new Color(119, 34, 255));
        // 修改位置
        panel.setLocation(80, 80);
        panel.setBorder(new LineBorder(Color.black, 2));
        panel.setVisible(true);

        this.add(panel);
        this.setVisible(true);
    }

    public static void main(String[] args) {
        MyFrame frame = new MyFrame();
    }
}

输出结果

对第一段代码的解释

? ? ? 第一段中设置了背景颜色,但没有显示,这里是因为button外层没有面板组件,所以将button加入窗口中时,按钮占据了整个空间,颜色就没有显示,但第二段代码中,button有了外层面板,所以就可以显示背景元素了。

三、常见布局管理

1.流式布局——FlowLayout

? ? ? 流式布局(默认布局),把组件放在一排,从左到右排放,一行占满后,重新开启一行,如果想要面板居中,可以通过构造方法控制,例如:

JPanel jpanel = new JPanel(new FlowLayout(FlowLayout.LEFT,10,30);

对上述构造方法进行解释:

  • 第一个参数是左对齐;
  • 第二个参数和第三个参数分别是水平间距和垂直间距,可以不加,默认为5;?

?代码举例

import javax.swing.*;
import java.awt.*;

public class FlowLayoutExample {

    public static void main(String[] args) {
        // 创建一个 JFrame 对象作为窗口
        JFrame frame = new JFrame("FlowLayout Example");

        // 设置窗口的大小和布局管理器
        frame.setSize(400, 300);
        frame.setLayout(new FlowLayout());

        // 创建一些按钮组件
        JButton button1 = new JButton("Button 1");
        JButton button2 = new JButton("Button 2");
        JButton button3 = new JButton("Button 3");
        JButton button4 = new JButton("Button 4");
        JButton button5 = new JButton("Button 5");

        // 将按钮组件添加到窗口中
        frame.add(button1);
        frame.add(button2);
        frame.add(button3);
        frame.add(button4);
        frame.add(button5);

        // 设置窗口可见
        frame.setVisible(true);
    }
}

输出结果

2.边界布局——BorderLayout

? ? ? 只允许在容器内放置5个组件,这5个组件的位置由BorderLayout类中的North、South、East、West和Center5个常量来确定的,他们对应这容器中的上下左右中,中间的区域是必须的,其他几个区域可以根据需要使用,注意:中间区域为默认,先加的会被后加的面板覆盖。

代码举例

import javax.swing.*;
import java.awt.*;

public class BorderLayoutExample {
    public static void main(String[] args) {
        // 创建一个窗口
        JFrame frame = new JFrame("BorderLayout Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 300);

        // 创建容器,并设置边界布局
        Container container = frame.getContentPane();
        container.setLayout(new BorderLayout());

        // 在北区域添加一个标签
        JLabel northLabel = new JLabel("北区域");
        container.add(northLabel, BorderLayout.NORTH);

        // 在南区域添加一个按钮
        JButton southButton = new JButton("南区域");
        container.add(southButton, BorderLayout.SOUTH);

        // 在东区域添加一个文本框
        JTextField eastTextField = new JTextField("东区域");
        container.add(eastTextField, BorderLayout.EAST);

        // 在西区域添加一个复选框
        JCheckBox westCheckBox = new JCheckBox("西区域");
        container.add(westCheckBox, BorderLayout.WEST);

        // 在中区域添加一个文本区域
        JTextArea centerTextArea = new JTextArea("中区域");
        container.add(centerTextArea, BorderLayout.CENTER);

        // 显示窗口
        frame.setVisible(true);
    }
}

输出结果

3.网格布局——GridLayout

? ? ? 类似一个表格,可以设置行数和列数,每个网格只能放一个组件,占满整个区域,从第一行开始摆放,第一行占满后,再开启第二行。

代码举例

import javax.swing.*;
import java.awt.*;

public class GridLayoutExample {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Grid Layout Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // 创建一个面板,并设置为网格布局
        JPanel panel = new JPanel(new GridLayout(3, 3)); // 创建一个3行3列的网格布局
        
        // 向面板中添加按钮
        for (int i = 1; i <= 9; i++) {
            JButton button = new JButton("Button " + i);
            panel.add(button);
        }
        
        // 将面板添加到窗口中
        frame.add(panel);
        
        // 设置窗口大小并显示
        frame.setSize(300, 300);
        frame.setVisible(true);
    }
}

输出结果

四、常用组件

Java中的GUI组件包括但不限于以下几种:

  1. JFrame:是一个顶层容器,可以用来创建窗口。
  2. JPanel:是一个容器,可以用来放置其他组件。
  3. JLabel:用于显示文本或图像。
  4. JTextField:用于输入文本。
  5. JPasswordField:用于输入密码。
  6. JButton:用于触发事件或执行操作。
  7. JCheckBox:复选框,允许用户选择一个或多个选项。
  8. JRadioButton:单选按钮,允许用户从一组选项中选择一个。
  9. JComboBox:下拉列表框,允许用户从一个下拉列表中选择一个选项。
  10. JList:列表框,允许用户从一个列表中选择一个或多个选项。
  11. JTextArea:多行文本框,可以显示和编辑多行文本。
  12. JScrollPane:滚动面板,用于显示大量内容时提供滚动功能。
  13. JSlider:滑动条,用于选择一个连续的值。
  14. JProgressBar:进度条,用于显示任务的进度。
  15. JOptionPane:对话框,用于显示提示、警告或错误信息。
  16. JTable:表格,用于显示和编辑二维数据。
  17. JFileChooser:文件选择器,用于选择文件或目录。
  18. JColorChooser:颜色选择器,用于选择颜色。
  19. JMenuBar、JMenu和JMenuItem:用于创建菜单和菜单项。
  20. JToolBar:工具栏,用于快速访问常用功能。

这些组件可以根据需要进行组合和布局,构建出各种复杂的GUI界面。

下面,我们将对部分组件进行详细讲解:

1.标签组件——JLabel

标签是容纳文本和图标的控件,通常用来在界面中识别的控件;

构造方法

new JLabel();? ? ?==>创建一个空的标签

new JLabel(String string);? ? ?==>创建一个带文本的标签

常用方法?

  1. setText(String text):设置文本内容。
  2. getText():获取文本内容。
  3. setIcon(Icon icon):设置图标。
  4. getIcon():获取图标。
  5. setHorizontalAlignment(int alignment):设置水平对齐方式。
  6. setVerticalAlignment(int alignment):设置垂直对齐方式。
  7. setFont(new Font("宋体",Font.BOLD,18))::设置字体。

常见字体:ITALIC——斜体,PLAIN——普通,UNDERLINED——下划线,两者之间可以一起使用,用“|”连接。

代码举例

import javax.swing.*;

public class JLabelExample extends JFrame{
    public static void main(String[] args) {
        JFrame frame = new JFrame("JLabel Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 创建一个JLabel对象,设置文本内容为"Hello World"
        JLabel label = new JLabel("Hello World");

        // 设置水平对齐方式为居中对齐
        label.setHorizontalAlignment(SwingConstants.CENTER);

        // 设置垂直对齐方式为中心对齐
        label.setVerticalAlignment(SwingConstants.CENTER);

        // 将JLabel添加到窗口中
        frame.getContentPane().add(label);

        frame.setSize(300, 200);
        frame.setVisible(true);
    }
}

结果

2.单行文本——JTextField

JTextField是Java中用于接收用户输入文本的文本框组件。它允许用户在文本框内输入文字,并可以通过代码来获取文本框中的内容。

构造方法

new JTextField(int columns);? ? ?==>创建一个可以输入columns个字符的单行文本

常用方法?

  1. setText(String text):设置文本框的初始文本内容。

  2. getText():获取文本框中的文本内容。

  3. setColumns(int columns):设置文本框的宽度,以显示指定数量的字符。

  4. setEditable(boolean editable):设置文本框是否可编辑。

  5. setHorizontalAlignment(int alignment):设置文本框中文本的水平对齐方式。可选值有SwingConstants.LEFT(左对齐)、SwingConstants.CENTER(居中对齐)和SwingConstants.RIGHT(右对齐)。

  6. setToolTipText(String text):为文本框设置鼠标悬停时显示的提示信息。

代码展示

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

public class JTextFieldExample extends JFrame{
    public static void main(String[] args) {
        JFrame frame = new JFrame("JTextField Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 创建一个JTextField对象
        JTextField textField = new JTextField();

        // 设置文本框的初始文本
        textField.setText("Enter text here");

        // 设置文本框的宽度
        textField.setColumns(20);

        // 创建一个按钮
        JButton button = new JButton("Get Text");

        // 添加按钮的点击事件监听器
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 获取文本框中的内容
                String text = textField.getText();
                // 在控制台打印获取到的文本内容
                System.out.println("Text: " + text);
            }
        });

        // 将文本框和按钮添加到窗口中
        frame.getContentPane().add(textField);
        frame.getContentPane().add(button);

        frame.setSize(300, 200);
        frame.setLayout(new FlowLayout());
        frame.setVisible(true);
    }
}

结果

3.多行文本框——JTextArea

JTextArea是Java中用于显示多行文本的组件,它可以允许用户在其中输入和编辑文本内容。

构造方法

new JTextArea(int H,int W);? ? ?==>创建一个指定行数和列数的空文本域

常用方法?

  1. setText(String text):设置文本区域的文本内容。

  2. getText():获取文本区域的文本内容。

  3. setEditable(boolean editable):设置文本区域是否可编辑。

  4. setLineWrap(boolean wrap):设置文本区域是否自动换行。

  5. setWrapStyleWord(boolean word):设置自动换行时是否按单词边界换行。

  6. getLineCount():获取文本区域中的行数。

  7. setRows(int rows):设置文本区域的行数。

  8. append(String text):在文本区域的末尾追加文本内容。

  9. insert(String text, int position):在指定位置插入文本内容。

  10. replaceRange(String text, int start, int end):替换指定范围内的文本内容。

  11. setFont(Font font):设置文本区域的字体。

如果需要文本区自动出现滚动条,可将文本区对象放入滚动窗格(JScrollPane)中:

JScrollPane pane = new JScrollPane(textArea);

this.add(pane);

代码展示?

import javax.swing.*;
import java.awt.*;

public class JTextAreaExample extends JFrame{
    public static void main(String[] args) {
        JFrame frame = new JFrame("JTextArea Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTextArea textArea = new JTextArea();
        textArea.setText("Enter text here");
        textArea.setEditable(true);
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        textArea.setFont(new Font("Arial", Font.PLAIN, 12));

        JScrollPane scrollPane = new JScrollPane(textArea);
        scrollPane.setPreferredSize(new Dimension(300, 200));

        frame.getContentPane().add(scrollPane);
        frame.pack();
        frame.setVisible(true);
    }
}

结果

4.密码框——JPasswordField

JPasswordField是Java中用于输入密码的组件,它继承自JTextField,但显示的内容是用星号(*)或其他自定义字符来代替实际的密码字符。

?构造方法

  1. JPasswordField():创建一个默认的密码字段对象,长度为0。

  2. JPasswordField(int columns):创建一个指定长度的密码字段对象,可以容纳指定数目的字符。

  3. JPasswordField(String text):创建一个包含指定文本的密码字段对象。

  4. JPasswordField(String text, int columns):创建一个包含指定文本和长度的密码字段对象。

?常用方法

  1. getPassword():返回一个字符数组,该数组包含用户输入的密码。

  2. setPassword(char[] password):将指定的字符数组设置为密码字段的内容。

  3. setEditable(boolean editable):设置密码字段是否可编辑。

  4. getText():返回密码字段的文本内容。注意,getText()方法返回的是一个字符串,而不是字符数组。

  5. setText(String text):将指定的字符串设置为密码字段的内容。

代码展示?

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

public class JPasswordFieldExample extends JFrame {
    private JTextField usernameField;
    private JPasswordField passwordField;
    private JButton loginButton;

    public JPasswordFieldExample() {
        setTitle("Password Field Example");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());

        usernameField = new JTextField(20);
        passwordField = new JPasswordField(20);
        loginButton = new JButton("Login");

        loginButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String username = usernameField.getText();
                char[] password = passwordField.getPassword();

                // 在此处添加验证用户名密码的代码

                // 清空密码字段
                passwordField.setText("");
            }
        });

        add(new JLabel("Username:"));
        add(usernameField);
        add(new JLabel("Password:"));
        add(passwordField);
        add(loginButton);

        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new JPasswordFieldExample();
            }
        });
    }
}

结果

5.按钮——JButton?

JButton是Java Swing库中的一个类,用于创建可点击的按钮组件。它继承自AbstractButton类,并提供了各种方法和事件来实现按钮的功能。

构造方法

  1. JButton() 创建一个没有文本和图标的普通按钮。

  2. JButton(String text) 创建一个带有指定文本的普通按钮。

  3. JButton(Icon icon) 创建一个带有指定图标的普通按钮。

  4. JButton(String text, Icon icon) 创建一个带有指定文本和图标的普通按钮。

常用方法及代码举例

设置按钮的文本内容:

JButton button = new JButton();
button.setText("Click me!");

设置按钮的图标:

JButton button = new JButton();
Icon icon = new ImageIcon("path/to/icon.png");
button.setIcon(icon);

添加按钮点击事件监听器:

JButton button = new JButton();
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        //处理按钮点击事件的逻辑
    }
});

设置按钮的提示文本:

JButton button = new JButton();
button.setToolTipText("This is a button");

设置按钮按下时的图标:

JButton button = new JButton();
Icon pressedIcon = new ImageIcon("path/to/pressedIcon.png");
button.setPressedIcon(pressedIcon);

设置按钮的快捷键:

JButton button = new JButton();
button.setMnemonic(KeyEvent.VK_ENTER); //设置回车键为按钮的快捷键

设置按钮的边框样式:

JButton button = new JButton();
button.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); //设置2像素的黑色边框

设置按钮的前景色和背景色:

JButton button = new JButton();
button.setForeground(Color.RED); //设置文本颜色为红色
button.setBackground(Color.YELLOW); //设置背景色为黄色

6.菜单组件

(1)菜单栏组件:

构造方法:JMenuBar();

方法:add(menu);

(2)向菜单栏添加菜单:

构造方法:JMenu(“菜单名称");

方法:add(menuItem);

(3)向菜单添加菜单选项:

构造方法:JMenuItem(“菜单项名称");

将菜单栏添加到窗口 setJMenuBar(menuBar);

代码举例

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

public class MenuExample extends JFrame {
    private JMenuBar menuBar;
    private JMenu fileMenu;
    private JMenuItem openMenuItem;
    private JMenuItem saveMenuItem;

    public MenuExample() {
        // 创建菜单栏
        menuBar = new JMenuBar();

        // 创建菜单
        fileMenu = new JMenu("File");

        // 创建菜单项
        openMenuItem = new JMenuItem("Open");
        saveMenuItem = new JMenuItem("Save");

        // 为菜单项添加点击事件监听器
        openMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // 处理打开菜单项的逻辑
                System.out.println("Open menu item clicked");
            }
        });

        saveMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // 处理保存菜单项的逻辑
                System.out.println("Save menu item clicked");
            }
        });

        // 将菜单项添加到菜单
        fileMenu.add(openMenuItem);
        fileMenu.add(saveMenuItem);

        // 将菜单添加到菜单栏
        menuBar.add(fileMenu);

        // 将菜单栏设置为窗口的菜单栏
        setJMenuBar(menuBar);

        // 设置窗口的基本属性
        setTitle("Menu Example");
        setSize(300, 200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new MenuExample();
            }
        });
    }
}

结果

??

五、事件处理?

要实现相应的功能,必须进行事件处理。

基本思路

一个事件源产生一个事件并把它送到监听器那里,监听器一直等待,直到它收到一个事件,一旦事件被接收,监听器将处理这些事情。

监听器

监听组件有没有事件产生,一旦点击了某个按钮产生事件,监听器就捕获到这件事情,从而去调用对应的实践处理程序。

事件监听器

方法名:addActionListener

使用方法:

组件对象.addActionListener(new ActionListener(){

? ? //进行事件处理

? ? public void actionPerformed(){

? ? ? ? //执行的操作

? ? }

});

例如菜单组件的例子。

不同的监听器

1.mouse相关接口与方法

接口一:MouseListener

特点:所有的方法都为抽象方法,即需要全部重写;

方法:

  • mouseClicked(MouseEvent e):单击(按下并释放)
  • mouseEntered(MouseEvent e):鼠标光标进入组件
  • mouseExited(MouseEvent e):鼠标光标退出组件
  • mousePressed(MouseEvent e):按下鼠标
  • mouseReleased(MouseEvent e):释放鼠标
接口二:MouseAdapter

特点:适配器,可以只重写一种或多种,没必要全写

方法同上

方法:addMouseListener(new 对象)

注意:一般要用内部类重写方法

2.key相关的接口与方法

方法:addKeyListener(new 对象);
接口:keyAdapter

特点:适配器

方法同mouse

实现类:KeyEvent

方法:

  1. getKeyChar():获得键的字符
  2. getKeyCode():获得键的编码

六、对话框——JOptionPane

1.showMessageDialog——消息对话框

showMessageDialog是JOptionPane类中的一个静态方法,用于显示一个简单的消息对话框。该方法有多个重载形式,可以用于显示不同类型的消息对话框,如信息、警告、错误等。

代码展示

import javax.swing.*;

public class MessageDialogExample extends JFrame {

    public static void main(String[] args) {
        // 显示一个简单的信息对话框
        JOptionPane.showMessageDialog(null, "Hello, World!");

        // 显示一个带有标题的信息对话框
        JOptionPane.showMessageDialog(null, "Welcome to Java", "Message", JOptionPane.INFORMATION_MESSAGE);

        // 显示一个警告对话框
        JOptionPane.showMessageDialog(null, "Something went wrong", "Warning", JOptionPane.WARNING_MESSAGE);

        // 显示一个错误对话框
        JOptionPane.showMessageDialog(null, "An error occurred", "Error", JOptionPane.ERROR_MESSAGE);
    }
}

方法总结?

第一个参数为null,第二个参数为提示信息,第三个参数为标题,第四个参数为对话框类型

2.showConfirmDialog——确认对话框

showConfirmDialog是JOptionPane类中的一个静态方法,用于显示一个确认对话框。该方法可以用于询问用户是否同意某个操作,并返回用户的选择。

代码展示

import javax.swing.*;

public class ConfirmDialogExample extends JFrame {
    public static void main(String[] args) {
        // 显示一个简单的确认对话框
        int result = JOptionPane.showConfirmDialog(null, "Are you sure?", "Confirmation", JOptionPane.YES_NO_OPTION);

        if (result == JOptionPane.YES_OPTION) {
            System.out.println("User clicked Yes");
        } else {
            System.out.println("User clicked No");
        }

        // 显示一个带有自定义按钮的确认对话框
        String[] options = {"Yes", "No", "Cancel"};
        int result2 = JOptionPane.showOptionDialog(null, "Choose an option", "Confirmation", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);

        if (result2 == JOptionPane.YES_OPTION) {
            System.out.println("User clicked Yes");
        } else if (result2 == JOptionPane.NO_OPTION) {
            System.out.println("User clicked No");
        } else if (result2 == JOptionPane.CANCEL_OPTION) {
            System.out.println("User clicked Cancel");
        }
    }
}

文章来源:https://blog.csdn.net/2301_77523019/article/details/134900795
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。