Java是一款广泛应用于Web和移动应用程序开发的编程语言,但Java同样支持开发桌面应用程序。在这篇文章中,我们将详细介绍如何使用Java开发桌面小程序,包括基本原理和示例。
1. 基本原理
Java使用AWT(抽象窗口工具包)和Swing(Java基础视图)来创建图形用户界面。AWT已被Swing替代,因为Swing提供更好的外观和感觉和更多的组件。Swing是一种跨平台的视图,可以在不同的操作系统上使用。
基于Swing的应用程序包括框架、面板、标签、按钮等组件。每个组件都有一个处理特定事件的侦听器。在Java中,事件是由事件源触发的,例如按钮按下、单选按钮选择或复选框选中。当事件源状态发生改变时,它通知所有的监听器。
Java的桌面小程序通常有以下三个部分:
1. 用户界面
2. 业务逻辑
3. 数据源
用户界面由各种组件构成,这些组件包括框架、标签、按钮、文本框、文本区域、下拉框等。业务逻辑实现程序需要完成的操作,包括计算、验证、数据库交互等。数据源是程序处理的数据,可能存储在本地文件、数据库中或从外部网络获取。
2. 示例
基于Java Swing的应用程序通常使用MVC(模型-视图-控制器)模式。在本示例中,我们将使用Eclipse来创建MVC桌面小程序。程序将包括用户界面、业务逻辑和数据源。
第一步,我们创建一个Java项目,并创建三个包分别用于MVC三个组件。我们将它们命名为model、view和controller。
接下来,我们在model包中创建一个类,该类将模拟从数据库中检索电影列表。我们使用数组来模拟数据库,示例代码如下:
```java
package model;
public class Movie {
private String title;
private String rating;
private String duration;
public Movie(String title, String rating, String duration) {
this.title = title;
this.rating = rating;
this.duration = duration;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getRating() {
return rating;
}
public void setRating(String rating) {
this.rating = rating;
}
public String getDuration() {
return duration;
}
public void setDuration(String duration) {
this.duration = duration;
}
public static Movie[] getMovies() { // 模拟数据库
Movie[] movies = {new Movie("电影1", "PG-13", "2小时30分钟"),
new Movie("电影2", "PG", "1小时50分钟"),
new Movie("电影3", "R", "2小时10分钟"),
new Movie("电影4", "NC-17", "2小时25分钟"),
new Movie("电影5", "G", "1小时45分钟")};
return movies;
}
}
```
接下来,在view包中创建一个类,该类将创建Swing用户界面并显示电影列表。示例代码如下:
```java
package view;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import model.Movie;
public class MovieView {
private JFrame frame;
private JTable table;
public MovieView() {
initialize();
}
private void initialize() {
frame = new JFrame("电影列表");
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.getContentPane().add(panel, BorderLayout.CENTER);
table = new JTable();
table.setModel(new DefaultTableModel(
new Object[][] {
},
new String[] {
"标题", "评级", "时长"
}
));
panel.setLayout(new BorderLayout(0, 0));
JScrollPane scrollPane = new JScrollPane(table);
panel.add(scrollPane);
frame.setVisible(true);
}
public void showMovies(Movie[] movies) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
for (Movie m: movies)
{
model.addRow(new Object[] {m.getTitle(), m.getRating(), m.getDuration()});
}
}
}
```
在controller包中,我们创建一个控制器类,该类将调用业务逻辑并更新视图以显示电影列表。示例代码如下:
```java
package controller;
import model.Movie;
import view.MovieView;
public class MovieController {
private MovieView view;
public MovieController(MovieView view) {
this.view = view;
}
public void showMovieList() {
Movie[] movies = Movie.getMovies();
view.showMovies(movies);
}
}
```
最后,在主函数中,我们创建一个MovieView和MovieController对象,并调用showMovieList方法以显示电影列表。示例代码如下:
```java
package main;
import view.MovieView;
import controller.MovieController;
public class Application {
public static void main(String[] args) {
MovieView view = new MovieView();
MovieController controller = new MovieController(view);
controller.showMovieList();
}
}
```
这就是一个简单的基于Java Swing的桌面小应用程序示例,程序使用了MVC的设计模式,实现了UI、业务逻辑和数据源的分离,使程序清晰易懂,易于维护。该程序可以用作学习Java桌面应用程序开发的起点。