Ich denke durch "Da irgendwelche oder keine der verschiedenen TextField
Objekte zu einem bestimmten Zeitpunkt ausgewählt werden konnten" beziehen Sie sich auf das (falls vorhanden) Textfeld hat den Tastaturfokus.
Sie können diese Informationen aus der Szene bekommen: nur tun
Node focusOwner = scene.getFocusOwner();
if (focusOwner instanceof TextField) {
TextField textField = (TextField) focusOwner ;
String selectedText = textField.getSelectedText();
// ...
}
Beachten Sie auch, dass TextInputControl
definiert eine copy()
Methode, die kopiert den markierten Text in die Zwischenablage. (Ebenso gibt es eine paste()
Methode.) Sie können diese also nutzen, um die Funktionalität zu vereinfachen.
Hier ist ein 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);
}
}
Hard ein 'Strg + C' Tastendruck ??? Iterate durch die Felder? Können Sie erklären, was Sie damit meinen ??? (Ein Schlüsselereignis selbst auf einem Nachkommenknoten des 'TextFeld' oder ähnlichem auslösen!) – fabian
Ich denke, ich habe das Problem ziemlich gut erklärt, aber hier ist der Pseudocode:' Clipboard.execute ("Strg + C") ' . Und ja, die alternative Lösung besteht darin, alle "TextField" -Objekte in ein Array zu setzen, iterieren durch das Array nach dem ersten "TextField" mit einer 'getSelected()' -Eigenschaft, die wahr ist. – jshapy8
Textfeld hat keine 'getSelected()' Methode. Beziehen Sie sich darauf, den Fokus zu haben? –