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图形界面编程。