2014-09-22 54 views
1

我想構建一個任務管理器。我試圖讓用戶編輯一個任務,程序將響應這個命令,而不需要用戶按下回車按鈕。是否可以在輸入時在文本字段中追加文本?

舉例來說,如果我有任務的列表:

  1. 上學
  2. 好日子

如果在文本字段的用戶類型的「編輯2」,我會比如程序在輸入的後面添加第二項任務的內容,而不必按下輸入按鈕,即文本字段應改爲edit 2 good day。然後用戶可以修改內容。

這可能嗎?

如果是,我需要學習的必要事項是什麼?

+0

可能您正在尋找_Property binding_功能。看看這個:http://docs.oracle.com/javafx/2/binding/jfxpub-binding.htm – SimY4 2014-09-22 07:26:25

回答

0

您可以使用TextFieldtextProperty()並使用它來完成此操作。

我創建了一個演示給你:

INPUT

編輯1

輸出

編輯1個上學

CODE

import java.util.HashMap; 
import java.util.Map; 

import javafx.application.Application; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.scene.Scene; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.Pane; 
import javafx.stage.Stage; 

public class TextFieldAutoAppend extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 

     Map<String, String> mapOfTasks = new HashMap<String, String>(); 
     mapOfTasks.put("1", "go to school"); 
     mapOfTasks.put("2", "good day"); 

     Pane pane = new Pane(); 
     TextField textField = new TextField(); 
     pane.getChildren().add(textField); 

     textField.textProperty().addListener(new ChangeListener<String>() { 

      @Override 
      public void changed(ObservableValue<? extends String> observable, 
        String oldValue, String newValue) { 
       String[] subStrings = newValue.split(" "); 
       if(subStrings.length ==2){ 
        if(subStrings[0].equalsIgnoreCase("edit") && mapOfTasks.keySet().contains(subStrings[1])){ 
         textField.setText(newValue + " " + mapOfTasks.get(subStrings[1])); 
        } 
       } 
      } 
     }); 

     Scene scene = new Scene(pane, 200, 200); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

非常感謝。有效。 Textproperty和changelistener解決了這個問題。 – leo277 2014-09-22 13:12:26

相關問題