我需要详细的代码,并需要写注释
时间: 2024-03-22 22:39:40 浏览: 180
好的,下面是详细的代码实现和注释:
```java
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Timer;
import java.util.TimerTask;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ColorPicker;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class NoteManager extends Application {
// 定义文件名和文件路径
private static final String FILENAME = "note.txt";
private static final String FILEPATH = System.getProperty("user.dir") + File.separator + FILENAME;
// 定义界面组件
private Stage stage;
private BorderPane root;
private TextArea noteArea;
private ColorPicker colorPicker;
private Button saveButton, restButton;
private Label timeLabel;
// 定义计时器
private Timer timer;
private int restTime = 0;
// 定义日期时间格式
private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
private static final DateTimeFormatter TIME_FORMAT = DateTimeFormatter.ofPattern("HH:mm:ss");
@Override
public void start(Stage primaryStage) throws Exception {
stage = primaryStage;
// 创建界面组件
noteArea = new TextArea();
noteArea.setWrapText(true); // 自动换行
colorPicker = new ColorPicker(Color.BLACK);
saveButton = new Button("保存");
restButton = new Button("休息");
timeLabel = new Label(getCurrentTime());
// 设置界面样式
root = new BorderPane();
root.setStyle("-fx-background-color: transparent;"); // 设置透明度
root.setPadding(new Insets(10));
root.setCenter(noteArea);
root.setBottom(createBottomBox());
// 创建场景并设置窗口样式
Scene scene = new Scene(root, 300, 400);
scene.setFill(Color.TRANSPARENT); // 设置透明度
stage.setScene(scene);
stage.initStyle(StageStyle.TRANSPARENT);
// 设置计时器
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
restTime++;
if (restTime == 10) { // 休息10秒钟
restTime = 0;
stage.setOpacity(1); // 恢复窗口透明度
timer.cancel();
}
}
}, 0, 1000);
// 读取文件中的便签内容
String noteContent = readFile(FILEPATH);
noteArea.setText(noteContent);
// 设置保存按钮事件
saveButton.setOnAction(event -> {
String noteContentNew = noteArea.getText();
writeFile(FILEPATH, noteContentNew);
});
// 设置休息按钮事件
restButton.setOnAction(event -> {
stage.setOpacity(0.5); // 设置窗口透明度
timer.schedule(new TimerTask() {
@Override
public void run() {
restTime++;
if (restTime == 10) { // 休息10秒钟
restTime = 0;
stage.setOpacity(1); // 恢复窗口透明度
timer.cancel();
}
}
}, 0, 1000);
});
// 设置时间日期显示
Thread thread = new Thread(() -> {
while (true) {
String dateTime = getCurrentTime();
timeLabel.setText(dateTime);
try {
Thread.sleep(1000); // 每秒钟更新一次
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.setDaemon(true);
thread.start();
// 显示窗口
stage.show();
}
/**
* 创建底部面板
*/
private HBox createBottomBox() {
HBox hbox = new HBox();
hbox.setSpacing(10);
hbox.setAlignment(Pos.CENTER_LEFT);
hbox.getChildren().addAll(colorPicker, saveButton, restButton, timeLabel);
return hbox;
}
/**
* 读取文件内容
*/
private String readFile(String filepath) {
File file = new File(filepath);
if (!file.exists()) {
return "";
}
StringBuilder sb = new StringBuilder();
try {
java.util.Scanner scanner = new java.util.Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
sb.append(line).append("\n");
}
scanner.close();
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
/**
* 写入文件内容
*/
private void writeFile(String filepath, String content) {
File file = new File(filepath);
try {
FileWriter writer = new FileWriter(file);
writer.write(content);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取当前日期时间
*/
private String getCurrentTime() {
LocalDateTime now = LocalDateTime.now();
String dateStr = DATE_FORMAT.format(now);
String timeStr = TIME_FORMAT.format(now);
return dateStr + " " + timeStr;
}
public static void main(String[] args) {
launch(args);
}
}
```
代码中使用了JavaFX框架来创建程序界面,实现了便签管理、休息、记事和提醒功能。其中,便签内容保存在本地文件系统中,时间日期显示使用Java的日期时间库来获取当前日期和时间。程序界面可以设置透明度和文字颜色。
阅读全文