Java图形界面编程简介
Java作为一门功能强大的编程语言,不仅广泛应用于后端开发,在前端开发中也有着广泛的应用。其中,Java图形界面编程(Java GUI Programming)是Java编程的一个重要组成部分,它允许开发者创建具有图形用户界面的应用程序。通过Java图形界面编程,我们可以打造出美观、实用且易于操作的桌面应用。
Java图形界面编程基础
1. Java Swing简介
Java Swing是Java图形界面编程中常用的一个库,它提供了丰富的组件,如按钮、文本框、菜单等,可以帮助我们轻松构建出具有图形用户界面的应用程序。
2. 创建第一个Swing应用程序
下面是一个简单的Swing应用程序示例,它创建了一个包含一个按钮的窗口:
import javax.swing.*;
public class HelloWorld {
public static void main(String[] args) {
JFrame frame = new JFrame("Hello World");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
JButton button = new JButton("Click Me");
frame.getContentPane().add(button);
frame.setVisible(true);
}
}
3. Swing组件介绍
Swing提供了多种组件,以下是一些常用的组件及其功能:
- JButton:按钮组件,用于触发事件。
- JTextField:文本框组件,用于输入文本。
- JPasswordField:密码框组件,用于输入密码。
- JLabel:标签组件,用于显示文本信息。
- JComboBox:下拉列表组件,用于选择选项。
- JTextArea:文本区域组件,用于显示多行文本。
Java图形界面编程实战
1. 实战项目:计算器
以下是一个简单的Java Swing计算器示例:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculator extends JFrame implements ActionListener {
private JTextField inputField;
private String[] buttons = {
"7", "8", "9", "+",
"4", "5", "6", "-",
"1", "2", "3", "*",
"C", "0", "=", "/"
};
public Calculator() {
super("Calculator");
setLayout(new BorderLayout());
inputField = new JTextField();
add(inputField, BorderLayout.NORTH);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(4, 4));
for (String button : buttons) {
JButton btn = new JButton(button);
btn.addActionListener(this);
panel.add(btn);
}
add(panel, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 300);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.equals("C")) {
inputField.setText("");
} else if (command.equals("=")) {
try {
String expression = inputField.getText();
double result = evaluate(expression);
inputField.setText(Double.toString(result));
} catch (Exception ex) {
inputField.setText("Error");
}
} else {
inputField.setText(inputField.getText() + command);
}
}
private double evaluate(String expression) {
return new Object() {
int pos = -1, ch;
void nextChar() {
ch = (++pos < expression.length()) ? expression.charAt(pos) : -1;
}
boolean eat(int charToEat) {
while (ch == ' ') nextChar();
if (ch == charToEat) {
nextChar();
return true;
}
return false;
}
double parse() {
nextChar();
double x = parseExpression();
if (pos < expression.length()) throw new RuntimeException("Unexpected: " + (char) ch);
return x;
}
double parseExpression() {
double x = parseTerm();
while (true) {
if (eat('+')) x += parseTerm();
else if (eat('-')) x -= parseTerm();
else return x;
}
}
double parseTerm() {
double x = parseFactor();
while (true) {
if (eat('*')) x *= parseFactor();
else if (eat('/')) x /= parseFactor();
else return x;
}
}
double parseFactor() {
if (eat('+')) return parseFactor();
if (eat('-')) return -parseFactor();
double x;
int startPos = this.pos;
if (eat '(') {
x = parseExpression();
eat(')');
} else if ((ch >= '0') && (ch <= '9')) {
while ((ch >= '0') && (ch <= '9') || ch == '.') nextChar();
x = Double.parseDouble(expression.substring(startPos, this.pos));
} else throw new RuntimeException("Unexpected: " + (char) ch);
return x;
}
}.parse();
}
}
2. 实战项目:图书管理系统
以下是一个简单的Java Swing图书管理系统示例:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
public class BookManager extends JFrame {
private JTextField titleField;
private JTextField authorField;
private JButton addButton;
private JList<String> bookList;
private DefaultListModel<String> listModel;
private List<Book> books;
public BookManager() {
super("Book Manager");
setLayout(new BorderLayout());
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new FlowLayout());
titleField = new JTextField(20);
authorField = new JTextField(20);
addButton = new JButton("Add Book");
inputPanel.add(new JLabel("Title:"));
inputPanel.add(titleField);
inputPanel.add(new JLabel("Author:"));
inputPanel.add(authorField);
inputPanel.add(addButton);
listModel = new DefaultListModel<>();
bookList = new JList<>(listModel);
JScrollPane scrollPane = new JScrollPane(bookList);
books = new ArrayList<>();
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String title = titleField.getText();
String author = authorField.getText();
if (!title.isEmpty() && !author.isEmpty()) {
books.add(new Book(title, author));
listModel.addElement(title);
titleField.setText("");
authorField.setText("");
}
}
});
add(inputPanel, BorderLayout.NORTH);
add(scrollPane, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new BookManager();
}
});
}
}
class Book {
private String title;
private String author;
public Book(String title, String author) {
this.title = title;
this.author = author;
}
public String getTitle() {
return title;
}
public String getAuthor() {
return author;
}
@Override
public String toString() {
return title + " by " + author;
}
}
总结
通过本文的介绍,相信你已经对Java图形界面编程有了初步的了解。从基础组件到实战项目,你可以一步步地打造出属于你自己的桌面应用。希望本文能帮助你轻松上手Java图形界面编程,开启你的编程之旅!
