2つの異なるアプローチ。 TextField
とsetEditable(false)
を使用できます。次に、TextFeild
をダブルクリックした後にTextField
のsetEditable(true)
を作成します。コードの前半にこのアプローチが示されています。もう1つの選択肢はLabel
です。 Label
をダブルクリックすると、Label
が非表示になり、TextField
またはTextArea
と表示されます。これらのノードの1つにデータを入力し、Enterを押したときにTextField
またはTextArea
を削除し、Label
にテキストを表示します。コードの後半にはこのアプローチが示されています。
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
*
* @author blj0011
*/
public class JavaFXApplication7 extends Application {
@Override
public void start(Stage primaryStage) {
VBox root = new VBox();
StackPane stackPane = new StackPane();
TextField textField = new TextField("Text");
textField.setEditable(false);//Set Editiable to false
textField.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
if(mouseEvent.getButton().equals(MouseButton.PRIMARY)){
if(mouseEvent.getClickCount() == 2){
textField.setEditable(true);//On double click set editable to true
textField.setOnKeyPressed(event ->{
if(event.getCode().toString().equals("ENTER"))
{
textField.setEditable(false);//On enter set editable to false
}
});
}
}
}
});
Label label = new Label("Test");
VBox.setVgrow(label, Priority.ALWAYS);
label.wrapTextProperty().set(true);
label.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
if(mouseEvent.getButton().equals(MouseButton.PRIMARY)){
if(mouseEvent.getClickCount() == 2){
label.setVisible(false);
TextArea textarea = new TextArea(label.getText());
textarea.setPrefHeight(label.getHeight() + 10);
stackPane.getChildren().add(textarea);
textarea.setOnKeyPressed(event ->{
System.out.println(event.getCode());
if(event.getCode().toString().equals("ENTER"))
{
label.setText(textarea.getText());
stackPane.getChildren().remove(textarea);
label.setVisible(true);
}
});
}
}
}
});
stackPane.getChildren().add(label);
root.getChildren().add(textField);
root.getChildren().add(stackPane);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
ようこそ。 [よくある質問](https://stackoverflow.com/help/how-to-ask) – bated
[こちら](https://stackoverflow.com/questions/44173811/)をご覧ください。アイデアはjavafx-label-selectable/44182371#44182371)を使用してください。 – Sedrick