2016-12-09 10 views
1

EnterキーなしでListCellに変更をコミットします。キーを入力してEnterキーを使わずにJavaFX ListCellで変更をコミットする方法は?

objetListview1.setEditable(true); 
objetListview1.setItems(FXCollections.observableArrayList(observableSet2)); 
objetListview1.setEditable(true); 

objetListview1.setCellFactory(lv -> { 
    TextFieldListCell<Typ> cell = new TextFieldListCell<Typ>(); 
    StringConverter<Typ> converter = new StringConverter<Typ>() { 
     @Override 
     public String toString(Typ obj) { 
      return obj.getTyp(); 
     } 

     @Override 
     public Typ fromString(String string) { 
      Typ obj = cell.getItem(); 
      if (obj == null) { 
       Typ newObj = new Typ(""); 
       newObj.setTyp(string); 

       return newObj; 
      } else { 
       obj.setTyp(string); 

       return obj; 
      } 
     } 

    }; 

    cell.setConverter(converter); 

    return cell; 
}); 

実はこのコードで、私は変更をコミットすることができます

は、私は、次のコードを持っています。

お願いします。

+0

可能/関連重複:http://stackoverflow.com/questions/29576577/tableview-doesnt-commit-values-on-focus-lost-event それは、あなたが価値を期待しているときには不明ですが、焦点を失うことを意味すると仮定すると、リンクされた質問を参照してください。 – Itai

+0

これは、私がTableViewでテストするときに動作しますが、ListViewで機能しません。 – user5772710

+0

リンクされたソリューションの 'ListView'バージョンを投稿してください。おそらく変更が必要ですが、試したことを知らずに言うことは不可能です。 – Itai

答えて

0

私の問題の解決策が見つかりました。

ここに私のコードです:

objetListview1.setCellFactory(lv -> new ListCell<Typ>() { 
      private TextField textField = new TextField() ; 

      { 
       textField.setOnAction(e -> { 
        commitEdit(getItem()); 
       }); 

       textField.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> { 
       if (!newValue) { 
        System.out.println("Commiting " + textField.getText()); 
        commitEdit(getItem()); 
       } 
      }); 
      } 

      @Override 
      protected void updateItem(Typ person, boolean empty) { 
       super.updateItem(person, empty); 
       if (empty) { 
        setText(null); 
        setGraphic(null); 
       } else if (isEditing()) { 
        textField.setText(person.getTyp()); 
        setText(null); 
        setGraphic(textField); 
       } else { 
        setText(person.getTyp()); 
        setGraphic(null); 
       } 
      } 

      @Override 
      public void startEdit() { 
       super.startEdit(); 
       textField.setText(getItem().getTyp()); 
       setText(null); 
       setGraphic(textField); 
       textField.selectAll(); 
       textField.requestFocus(); 
      } 

      @Override 
      public void cancelEdit() { 
       super.cancelEdit(); 
       setText(getItem().getTyp()); 
       setGraphic(null); 
      } 

      @Override 
      public void commitEdit(Typ person) { 
       super.commitEdit(person); 
       person.setTyp(textField.getText()); 
       setText(textField.getText()); 
       setGraphic(null); 
      } 
     }); 
関連する問題