轻松上手Java图形界面编程:从基础到实践案例全解析

2026-08-11 0 阅读

Java图形界面编程(GUI编程)是Java语言的一个重要应用领域,它允许开发者创建具有图形用户界面的应用程序。Java提供了丰富的API来支持GUI编程,如Swing和JavaFX。本文将带领你从Java图形界面编程的基础知识开始,逐步深入到实践案例,帮助你轻松上手。

一、Java图形界面编程基础

1.1 GUI编程简介

GUI编程指的是使用图形用户界面来与用户交互的编程方式。在Java中,GUI编程主要依赖于Swing和JavaFX这两个库。

1.2 Swing简介

Swing是Java的一个图形界面工具包,它提供了丰富的组件,如按钮、文本框、列表框等,用于构建图形用户界面。

1.3 JavaFX简介

JavaFX是Java的一个新一代图形界面库,它提供了更加丰富和现代化的组件,如布局管理器、样式表等。

二、Swing组件使用

2.1 常用组件

  • 按钮(JButton):用于响应用户的点击操作。
  • 文本框(JTextField):用于输入和显示文本。
  • 标签(JLabel):用于显示文本或图像。
  • 复选框(JCheckBox):用于选择多个选项中的一个。
  • 单选按钮(JRadioButton):用于选择多个选项中的一个。

2.2 组件布局

在Swing中,组件的布局可以使用布局管理器来实现。常用的布局管理器有:

  • FlowLayout:按从左到右、从上到下的顺序排列组件。
  • BorderLayout:将组件分为上、下、左、右、中五个区域。
  • GridLayout:将组件排列成网格状。

三、JavaFX组件使用

3.1 常用组件

  • 按钮(Button):用于响应用户的点击操作。
  • 文本框(TextField):用于输入和显示文本。
  • 标签(Label):用于显示文本或图像。
  • 复选框(CheckBox):用于选择多个选项中的一个。
  • 单选按钮(RadioButton):用于选择多个选项中的一个。

3.2 布局管理器

JavaFX提供了多种布局管理器,如:

  • BorderPane:将组件分为上、下、左、右、中五个区域。
  • VBox:垂直排列组件。
  • HBox:水平排列组件。

四、实践案例

4.1 计算器

以下是一个简单的计算器示例,使用Swing组件实现:

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

public class Calculator extends JFrame {
    private JTextField inputField;
    private JButton[] numberButtons;
    private JButton[] operatorButtons;
    private JButton addButton, subtractButton, multiplyButton, divideButton, equalButton, clearButton;
    private double result = 0;
    private String operator = "=";
    private boolean calculating = true;

    public Calculator() {
        inputField = new JTextField("0", 12);
        inputField.setEditable(false);

        addButton = new JButton("+");
        subtractButton = new JButton("-");
        multiplyButton = new JButton("*");
        divideButton = new JButton("/");
        equalButton = new JButton("=");
        clearButton = new JButton("C");

        numberButtons = new JButton[10];
        for (int i = 0; i < 10; i++) {
            numberButtons[i] = new JButton(String.valueOf(i));
        }

        setLayout(new BorderLayout());
        add(inputField, BorderLayout.NORTH);

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(4, 4));
        panel.add(addButton);
        panel.add(subtractButton);
        panel.add(multiplyButton);
        panel.add(divideButton);
        for (int i = 0; i < 10; i++) {
            panel.add(numberButtons[i]);
        }
        panel.add(equalButton);
        panel.add(clearButton);

        add(panel, BorderLayout.CENTER);

        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (calculating) {
                    inputField.setText("");
                    calculating = false;
                }
                operator = "+";
            }
        });

        subtractButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (calculating) {
                    inputField.setText("");
                    calculating = false;
                }
                operator = "-";
            }
        });

        multiplyButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (calculating) {
                    inputField.setText("");
                    calculating = false;
                }
                operator = "*";
            }
        });

        divideButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (calculating) {
                    inputField.setText("");
                    calculating = false;
                }
                operator = "/";
            }
        });

        equalButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                double input = Double.parseDouble(inputField.getText());
                if (operator.equals("+")) {
                    result += input;
                } else if (operator.equals("-")) {
                    result -= input;
                } else if (operator.equals("*")) {
                    result *= input;
                } else if (operator.equals("/")) {
                    result /= input;
                }
                inputField.setText(String.valueOf(result));
                calculating = true;
            }
        });

        clearButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                inputField.setText("0");
                result = 0;
                operator = "=";
                calculating = true;
            }
        });

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(200, 300);
        setVisible(true);
    }

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

4.2 待办事项列表

以下是一个简单的待办事项列表示例,使用JavaFX组件实现:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

import java.util.ArrayList;
import java.util.List;

public class TodoList extends Application {
    private List<String> todos = new ArrayList<>();
    private ListView<String> listView;
    private TextField textField;

    @Override
    public void start(Stage primaryStage) {
        listView = new ListView<>();
        textField = new TextField();
        textField.setPromptText("添加待办事项");

        Button addButton = new Button("添加");
        addButton.setOnAction(e -> {
            String text = textField.getText();
            if (!text.isEmpty()) {
                todos.add(text);
                textField.clear();
                listView.getItems().add(text);
            }
        });

        Button removeButton = new Button("移除");
        removeButton.setOnAction(e -> {
            int index = listView.getSelectionModel().getSelectedIndex();
            if (index != -1) {
                todos.remove(index);
                listView.getItems().remove(index);
            }
        });

        VBox root = new VBox();
        root.setPadding(new Insets(10));
        root.setSpacing(10);
        root.getChildren().addAll(listView, textField, addButton, removeButton);

        Scene scene = new Scene(root, 300, 200);
        primaryStage.setTitle("待办事项列表");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

通过以上示例,你可以了解到Java图形界面编程的基本知识和实践技巧。希望本文能帮助你轻松上手Java图形界面编程。

分享到: