1
私は、TextField
とTextArea
のようなJavaFXコントロールで、キャレットの近くにオートコンプリートのようなドロップダウンボックスを描きたいと思います。JavaFXのキャレット座標(位置ではない)を知るには?
ノード座標系でのキャレットの二重数値座標を知ることはできますか?
私は、TextField
とTextArea
のようなJavaFXコントロールで、キャレットの近くにオートコンプリートのようなドロップダウンボックスを描きたいと思います。JavaFXのキャレット座標(位置ではない)を知るには?
ノード座標系でのキャレットの二重数値座標を知ることはできますか?
inputMethodRequests
プロパティを使用して位置を取得できます。選択範囲の先頭からの相対的なインデックスを指定して、charの画面座標を取得することができます。
private static ContextMenu createMenu(String... text) {
ContextMenu menu = new ContextMenu();
EventHandler<ActionEvent> handler = evt -> {
TextInputControl control = (TextInputControl) menu.getUserData();
String t = ((MenuItem) evt.getSource()).getText();
control.replaceSelection(t);
};
for (String s : text) {
MenuItem item = new MenuItem(s);
item.setOnAction(handler);
menu.getItems().add(item);
}
return menu;
}
@Override
public void start(Stage primaryStage) {
ContextMenu menu = createMenu("Hello World", "42", "foo", "bar");
TextArea textArea = new TextArea();
TextField textField = new TextField();
VBox root = new VBox(textArea, textField);
root.setPadding(new Insets(10));
EventHandler<KeyEvent> handler = evt -> {
if (evt.isControlDown() && evt.getCode() == KeyCode.SPACE) {
evt.consume();
TextInputControl control = (TextInputControl) evt.getSource();
Point2D pos = control.getInputMethodRequests().getTextLocation(0);
menu.setUserData(control);
menu.show(control, pos.getX(), pos.getY());
menu.requestFocus();
}
};
textArea.addEventFilter(KeyEvent.KEY_PRESSED, handler);
textField.addEventFilter(KeyEvent.KEY_PRESSED, handler);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
これはあなたが探しているものではありません[Ambior answer](https://github.com/TomasMikula/RichTextFX/issues/30)? –