gpt4 book ai didi

JavaFX:硬编码 "Ctrl+C"按键

转载 作者:行者123 更新时间:2023-11-30 07:54:17 25 4
gpt4 key购买 nike

我有一个 JavaFX 应用程序,在主框架中有各种 TextField 小部件。我有一个 MenuBar,其中包含 MenuItem 对象“复制”和“粘贴”,就像标准生产应用程序一样。由于在任何给定时间都可以选择各种 TextField 对象中的任何一个或都不选择,因此在 setOnAction 中硬编码“Ctrl+C”或“Ctrl+V”按键似乎更容易“复制”和“粘贴”MenuItem 对象的 事件,而不是使用 Clipboard 对象并循环遍历所有 TextFields 以找到突出显示的文本(如果有)。

有没有办法在 Java 中硬编码这个按键 Action ?我查看了 KeyCombination 类,但它实际上并没有触发给定组合键所描述的操作。

最佳答案

我认为“由于可以在任何给定时间选择各种 TextField 对象中的任何一个或没有一个对象”,您指的是哪个(如果有)文本字段具有键盘焦点。

你可以很容易地从现场得到这些信息:just do

Node focusOwner = scene.getFocusOwner();
if (focusOwner instanceof TextField) {
TextField textField = (TextField) focusOwner ;
String selectedText = textField.getSelectedText();
// ...
}

另请注意,TextInputControl 定义了一个 copy() 方法,可将所选文本复制到系统剪贴板。 (同样,还有一个 paste() 方法。)因此您可以利用这些方法来简化功能。

这是一个 SSCCE:

import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextField;
import javafx.scene.control.TextInputControl;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FocusMenuTest extends Application {

@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();
VBox textFields = new VBox(5, new TextField("One"), new TextField("Two"), new TextField("Three"));
MenuBar menuBar = new MenuBar();
Menu edit = new Menu("Edit");
MenuItem copy = new MenuItem("Copy");

copy.setOnAction(e -> {
Node focusOwner = menuBar.getScene().getFocusOwner();
if (focusOwner instanceof TextInputControl) {
((TextInputControl)focusOwner).copy();
}
});

MenuItem paste = new MenuItem("Paste");
paste.setOnAction(e -> {
Node focusOwner = menuBar.getScene().getFocusOwner();
if (focusOwner instanceof TextInputControl) {
((TextInputControl)focusOwner).paste();
}
});

menuBar.getMenus().add(edit);
edit.getItems().addAll(copy, paste);
root.setCenter(textFields);
root.setTop(menuBar);
Scene scene = new Scene(root, 400, 400);


primaryStage.setScene(scene);
primaryStage.show();
}

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

关于JavaFX:硬编码 "Ctrl+C"按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44144437/

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