gpt4 book ai didi

java - FX TextField 禁用节点事件

转载 作者:行者123 更新时间:2023-11-29 05:05:13 26 4
gpt4 key购买 nike

我很清楚 Java FX Node API 的状态:

A disabled Node does not receive mouse or key events.

所以,我正在尝试想出一个变通办法。在我们旧的 Swing 应用程序中,我们曾经允许用户双击禁用的 Web/电子邮件字段(格式化文本字段)以打开指向页面或其 native 邮件客户端的链接。我希望在 FX 中模拟这种行为。而不是调用:

setDisable(true);

我现在打电话:

setEditable(false);

唯一剩下的问题是我想将节点设置为禁用状态,或者至少禁用文本选择。

是否有一种简单的方法可以在节点被禁用时获取其准确的样式,或者我是否需要创建自己的 CSS 类? (不幸的是,我的 CSS 知识相对薄弱)。

最佳答案

如果不复制已禁用文本字段的默认规则,我看不到使用 CSS 执行此操作的“简单”方法(但也许其他人对此有窍门)。

不过,这是一种完全不同的方法。当文本字段被禁用时,它不会接收鼠标事件,因此任何鼠标事件都只会“掉落”到 Z 顺序中它下面的节点。因此,如果您将文本字段包装在某个 Pane 中,并向该 Pane 注册鼠标处理程序,则在禁用文本字段时将调用该鼠标处理程序。

中南合作:

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class DIsabledTextFieldEventTest extends Application {

@Override
public void start(Stage primaryStage) {
TextField textField = new TextField();
StackPane textFieldHolder = new StackPane(textField);

CheckBox disableTextField = new CheckBox("Disable text field");
textField.disableProperty().bind(disableTextField.selectedProperty());

textFieldHolder.setOnMouseClicked(e -> {
if (e.getClickCount() == 2) {
System.out.println("Double click on disabled text field!");
}
});

VBox root = new VBox(10, disableTextField, textFieldHolder);
root.setAlignment(Pos.CENTER);

Scene scene = new Scene(root, 350, 120);
primaryStage.setScene(scene);
primaryStage.show();
}

public static void main(String[] args) {
launch(args);
}
}

关于java - FX TextField 禁用节点事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30597430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com