实现效果
代码
import javafx.application.Application;
import javafx.application.Platform;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Text;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
// 在状态栏中加入各个按键
Menu File = new Menu("File");
MenuItem Open = new MenuItem("Open");
MenuItem Save = new MenuItem("Save");
MenuItem Clear = new MenuItem("Clear");
MenuItem Exit = new MenuItem("Exit");
// 图标显示
ImageView openImg = new ImageView(new Image("https://pic1.superbed.cn/item/5de106098e0e2e3ee9176a94.png"));
ImageView saveImg = new ImageView(new Image("https://pic3.superbed.cn/item/5de107a78e0e2e3ee9179dda.png"));
Open.setGraphic(openImg);
Save.setGraphic(saveImg);
File.getItems().addAll(Open, Save, Clear, Exit);
// 建立一个顶部状态栏
MenuBar menuBar = new MenuBar();
menuBar.prefWidthProperty().bind(primaryStage.widthProperty());
menuBar.getMenus().add(File);
// 点击Exit直接退出程序
Exit.setOnAction(e -> {
Platform.exit();
});
// 第二行图标
HBox two = new HBox();
Button opens = new Button();
Button saves = new Button();
opens.setStyle("-fx-background-image: url('https://pic3.superbed.cn/item/5de1058b8e0e2e3ee9175771.png')");
opens.setMinSize(48, 48);
saves.setStyle("-fx-background-image: url('https://pic2.superbed.cn/item/5de1075e8e0e2e3ee9179528.png')");
saves.setMinSize(48, 48);
two.setSpacing(30);
two.getChildren().addAll(opens, saves);
// 第三行设置前景色
VBox qjs = new VBox();
Text Qcolor = new Text("前景色:");
ColorPicker qspick = new ColorPicker();
qspick.setValue(Color.CORAL);
qjs.getChildren().addAll(Qcolor, qspick);
// 第三行设置后景色
VBox bjs = new VBox();
Text Bcolor = new Text("背景色:");
ColorPicker bspick = new ColorPicker();
bspick.setValue(Color.CORAL);
bjs.getChildren().addAll(Bcolor, bspick);
// 合并第三行
HBox three = new HBox();
three.setSpacing(30);
three.getChildren().addAll(qjs, bjs);
three.setAlignment(Pos.CENTER);
// 顶部打包
VBox top = new VBox();
Separator line1 = new Separator();
Separator line2 = new Separator();
top.setSpacing(3);
top.getChildren().addAll(menuBar, two, line1, three);
// 文本输入
TextArea textArea = new TextArea();
Rectangle rectangle = new Rectangle(0, 0, 600, 650);
StackPane stackPane = new StackPane();
stackPane.getChildren().addAll(rectangle, textArea);
textArea.setStyle("border:0; background-color:transparent; overflow: hidden; border-style:none;");
rectangle.setFill(Color.color(0.5, 0.5, 0.5));
// 前景色改变字体颜色
qspick.setOnAction(e -> {
changeColor(qspick, bspick, textArea);
});
// 背景色改变背景颜色
bspick.setOnAction(e -> {
changeColor(qspick, bspick, textArea);
});
// 点击菜单栏clear
Clear.setOnAction(e -> {
textArea.setText("");
});
// 点击顶部Open
Open.setOnAction(e -> {
open(primaryStage, textArea);
});
// 点击openimg
opens.setOnMouseClicked(e -> {
open(primaryStage, textArea);
});
// 点击顶部保存
Save.setOnAction(e -> {
save(primaryStage, textArea);
});
// 点击saveimg
saves.setOnMouseClicked(e -> {
save(primaryStage, textArea);
});
BorderPane root = new BorderPane();
root.setTop(top);
root.setCenter(stackPane);
Scene scene = new Scene(root, 600, 650);
primaryStage.setTitle("EditPlus");
primaryStage.setScene(scene);
primaryStage.show();
}
// 打开读入文件的操作
static void open(Stage stage, TextArea textArea) {
FileChooser fp = new FileChooser();
fp.setTitle("选择文件——打开");
java.io.File file = fp.showOpenDialog(stage);
if (file != null && file.exists()) {
try {
// 读取数据放入多行文本
FileInputStream in = new FileInputStream(file);
byte[] bs = new byte[(int)file.length()];
in.read(bs);
// 将内容设置到多行文本框
textArea.setText(new String(bs));
in.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
// 保存文件的操作
static void save(Stage stage, TextArea textArea) {
FileChooser fc = new FileChooser();
fc.setTitle("选择文件-保存");
java.io.File file = fc.showSaveDialog(stage);
if (file!=null) {
//将多行文本框中的内容写到file指向的文件中去
try {
//创建输出流
FileOutputStream out = new FileOutputStream(file);
out.write(textArea.getText().getBytes());
out.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
// 更改颜色
private static void changeColor(ColorPicker one, ColorPicker two, TextArea textArea) {
String temp1 = String.format("%s", one.getValue());
String temp2 = String.format("%s", two.getValue());
textArea.setStyle(String.format("-fx-text-fill: #%s; background: #%s", temp1.substring(2), temp2.substring(2)));
}
}
后记
以上的图标是通过网络查找进行下载的,下载后的图标上传存在了聚合图床中,程序运行的时候通过url访问得到图标的样式。