使用JavaFx开发一些常用的小工具

2023年 8月 21日 31.8k 0

作为一个Java开发工程师,一直有一个想用java写桌面端程序的想法。最近想把一些常用的工具都使用javafx封装起来。这样每次都不用去网络上找,直接打开自己写的小工具就可以了。

idea创建

建议使用gradle来进行构建,这样打包时可以直接使用jlink或者jpackage来进行打包。

按照步骤,选择我们常用的组件即可。自动生成的项目是带module-info.java文件的,模块化便于后续打包时包体更小。

编写JavaFx代码

SHA算法

JavaFx是xml和controller分离的结构。我们需要通过SceneBuilder工具来编写我们xml工具,直接拖动即可。idea其实也提供了打开fxml文件的途径。

具体SceneBuilder的使用可以自行摸索一下,还是非常简单的。剩下的就是处理我们的逻辑了。涉及到一个输入文本,两个输出文本,一个选择框(切换算法),三个事件。

package cn.db.tools.dbtools.controller;

import cn.db.tools.dbtools.message.ToastMessage;
import com.google.common.hash.HashCode;
import com.google.common.hash.HashFunction;
import com.google.common.hash.Hashing;
import com.google.common.io.BaseEncoding;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.Clipboard;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.DataFormat;
import org.pomo.toasterfx.model.impl.ToastTypes;

import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Locale;
import java.util.ResourceBundle;

/**
* @author:zooooooooy
* @date: 2023/8/9 - 18:10
*/
public class Sha1Controller implements Initializable {

@FXML
private TextArea originalTextArea;

@FXML
TextField textFieldHex;

@FXML
TextField textFieldBase64;

@FXML
ChoiceBox choiceBox;

BaseEncoding baseEncoding = BaseEncoding.base64();

@FXML
protected void originTextChanged() {

originTextChanged(choiceBox.getSelectionModel().selectedIndexProperty().get());
}

private void originTextChanged(int type) {

HashFunction hashFunction = null;
switch (type) {
case 0:
hashFunction = Hashing.sha1();
break;
case 1:
hashFunction = Hashing.sha256();
break;
case 2:
hashFunction = Hashing.sha512();
break;
}

HashCode hashCode = hashFunction.hashBytes(originalTextArea.getText().getBytes(StandardCharsets.UTF_8));
textFieldHex.setText(hashCode.toString());
textFieldBase64.setText(baseEncoding.encode(hashCode.asBytes()));
}

@FXML
protected void copyTextFieldHex() {
Clipboard sc = Clipboard.getSystemClipboard();
ClipboardContent clipboardContent = new ClipboardContent();
clipboardContent.put(DataFormat.PLAIN_TEXT, textFieldHex.getText());

sc.setContent(clipboardContent);

// 弹出toast消息
ToastMessage.getInstance().popMessage("复制成功", ToastTypes.SUCCESS);
}

@FXML
protected void copyTextFieldBase64() {
Clipboard sc = Clipboard.getSystemClipboard();
ClipboardContent clipboardContent = new ClipboardContent();
clipboardContent.put(DataFormat.PLAIN_TEXT, textFieldBase64.getText());

sc.setContent(clipboardContent);

// 弹出toast消息
ToastMessage.getInstance().popMessage("复制成功", ToastTypes.SUCCESS);
}

@Override
public void initialize(URL location, ResourceBundle resources) {
choiceBox.setItems(FXCollections.observableArrayList("SHA1", "SHA256", "SHA512"));
choiceBox.getSelectionModel().select(0);

choiceBox.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论