2017-08-18 19 views
-1

adding new category within the same window私はJavaFXを使用して新しいフォームを作成しています。私は私が、私はアイテムのフォームに新しいカテゴリを追加する必要がある場合は、インベントリに新しい項目を追加するためのJavaFXを使って新しいフォームを作っています新しいカテゴリに

を追加するためのフォームの中にポップアップテキストフィールドを必要とします赤い枠で示されているように新しいテキストフィールドをポップアップすることによって、フレーム自体内で行うことができなければなりません。 JavaFXでも同じことをする方法はありますか?

+4

ようこそ。 [よくある質問](https://stackoverflow.com/help/how-to-ask) – bated

+0

[こちら](https://stackoverflow.com/questions/44173811/)をご覧ください。アイデアはjavafx-label-selectable/44182371#44182371)を使用してください。 – Sedrick

答えて

0

2つの異なるアプローチ。 TextFieldsetEditable(false)を使用できます。次に、TextFeildをダブルクリックした後にTextFieldsetEditable(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); 
    }  

} 
関連する問題