【javaFx】使用小记录

1、VBox:类似Android的LinearLayout竖向布局

2、HBox:类似Android的LinearLayout横向布局

布局里面添加控件:

vBox.getChildren().addAll()

添加多个或者add()添加一个

设置布局里面控件之间的边距:

hbox.setSpacing(10);

设置宽度/高度:

textField.setPrefWidth(300);
textField.setPrefHeight(300);

设置textArea自动换行:

textArea.setWrapText(true);

textArea自动滚动到底部:

print.appendText("追加文本,然后下面代码滚动到底部");
print.selectEnd(); 
print.deselect();

固定窗口大小不可调节:

primaryStage.setResizable(false);//固定大小不可调节

子线程里面需要更新UI的话:(类似Android里面的runOnUiThread())

Platform.runLater(() -> { 
    //todo 
});

拖拽文件或文字到窗口上面:

//拖拽到vBox控件里面
private void onDragInit(VBox vBox, TextField fileInputPath) {

    vBox.setOnDragOver(event -> {
        if (event.getGestureSource() != vBox){
            event.acceptTransferModes(TransferMode.ANY);
        }
        event.consume();
    });
    vBox.setOnDragDropped(event -> {
        Dragboard db = event.getDragboard();
        boolean success = false;
        if (db.hasFiles()){
            try {
                File file = db.getFiles().get(0);
                if (file != null) {
                    String absolutePath = file.getAbsolutePath();
                    fileInputPath.setText(absolutePath);//把路径写到这个文本框里面
                }
                success = true;
            }catch (Exception e){
                System.err.println(e.toString());
            }
        }else if (db.hasString()) {
            fileInputPath.setText(db.getString());//如果拖拽的是文字,就把文字写到文本框里面
            success = true;
        }
        event.setDropCompleted(success);

        event.consume();
    });
}

弹窗:

第一个参数可以选Alert.AlertType.里面的message、WARNING、Error等

Alert alert = new Alert(Alert.AlertType.WARNING, "请先选择翻译文档!"); alert.show();

文件选择器:

public void selectFile(TextField textField, Stage primaryStage) {
    FileChooser fileChooser = new FileChooser();
    fileChooser.setTitle("选择翻译文档");
    FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("Excel files (*.xlsx)", "*.xlsx");
    fileChooser.getExtensionFilters().add(extFilter);
    File file = fileChooser.showOpenDialog(primaryStage);
    if (file != null) {
        textField.setText(file.getPath());
    }
}

文件夹选择器:

public void selectFileOutDir(Hyperlink label, Stage primaryStage) {
    DirectoryChooser directoryChooser = new DirectoryChooser();
    File file = directoryChooser.showDialog(primaryStage);
    if (file != null) {
        String path = file.getPath();//选择的文件夹路径
        label.setText(path);
    }
}

打开文件/文件夹目录:

File file = new File(path);
if (file.exists()) {
    Desktop.getDesktop().open(file);
}

悬停文本提示:

Tooltip tooltip = new Tooltip();
tooltip.setText("提示的文本");
labelOutPath.setTooltip(tooltip);//悬停在labelOutPath控件上的时候显示提示文字

监听文本变化:

//labelOutPath.text改变的时候,把text也设置给tooltip.text
tooltip.textProperty().bind(labelOutPath.textProperty());

如果要绑定的类型不匹配,比如:

rectangle.xProperty().bind(textField.textProperty()); 

上面这个代码是编译不过的,要实现绑定文本字段(textField)的文本属性(textProperty)到矩形(rectangle)的 x 属性(xProperty),可以使用以下代码:

DoubleBinding xBinding = Bindings.createDoubleBinding(() -> {
    try {
        return Double.parseDouble(textField.getText());
    } catch (NumberFormatException e) {
        return 0.0;
    }
}, textField.textProperty());

rectangle.xProperty().bind(xBinding);

这段代码创建了一个 DoubleBinding 对象 xBinding,它将文本字段的文本属性转换为 double 值。如果转换失败,则默认返回 0.0。然后,将 xBinding 绑定到矩形的 x 属性上。这样,矩形的 x 属性将始终与文本字段的文本属性保持一致。

猜你喜欢

转载自blog.csdn.net/qq_35584878/article/details/121989370