我想構建一個任務管理器。我試圖讓用戶編輯一個任務,程序將響應這個命令,而不需要用戶按下回車按鈕。是否可以在輸入時在文本字段中追加文本?
舉例來說,如果我有任務的列表:
- 上學
- 好日子
如果在文本字段的用戶類型的「編輯2」,我會比如程序在輸入的後面添加第二項任務的內容,而不必按下輸入按鈕,即文本字段應改爲edit 2 good day
。然後用戶可以修改內容。
這可能嗎?
如果是,我需要學習的必要事項是什麼?
我想構建一個任務管理器。我試圖讓用戶編輯一個任務,程序將響應這個命令,而不需要用戶按下回車按鈕。是否可以在輸入時在文本字段中追加文本?
舉例來說,如果我有任務的列表:
如果在文本字段的用戶類型的「編輯2」,我會比如程序在輸入的後面添加第二項任務的內容,而不必按下輸入按鈕,即文本字段應改爲edit 2 good day
。然後用戶可以修改內容。
這可能嗎?
如果是,我需要學習的必要事項是什麼?
您可以使用TextField
的textProperty()
並使用它來完成此操作。
我創建了一個演示給你:
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);
}
}
非常感謝。有效。 Textproperty和changelistener解決了這個問題。 – leo277 2014-09-22 13:12:26
可能您正在尋找_Property binding_功能。看看這個:http://docs.oracle.com/javafx/2/binding/jfxpub-binding.htm – SimY4 2014-09-22 07:26:25