2017-05-31 9 views
1

JavaFXテキストフィールドに入力されたキーによってトリガされるこのコードは、常に1文字の後ろにあります。たとえば、ユーザーがkを入力すると、searchBar.getText()に出力される文字列は ""と等しくなります。ユーザーが別のkを入力すると、kと等しくなります。JavaFXテキストフィールドを1文字の後ろにつけるとき

//this is triggered when a key is typed into search bar 
     @FXML public void onKeyPressedOnSearch(){ 
      File[] fileCollection = model.getFileCollection(); 


      System.out.println(searchBar.getText()); 
      System.out.println(fileCollection[0].getName().substring(0, searchBar.getText().length())); 
      List<String> list = new ArrayList<String>(); 
      ObservableList<String> tempObservableList = FXCollections.observableList(list); 


     /* for(int i = 0; i < fileCollection.length; i++){ 
       if(!(searchBar.getText().equals(fileCollection[i].getName().substring(0, searchBar.getText().length())))){ 
        tempObservableList.remove(i); 
       } 
      } 


      if(searchBar.getText() == null || searchBar.getText() == ""){ 
       songList.setItems(observableList); 
      }else{ 
       songList.setItems(tempObservableList); 
      } */ 
     } 
+0

あなたはonKeyReleasedを聞くべきでしょうか? – tsolakp

+0

@tsolakp私もそれを試みました。 –

答えて

2

私はあなたがそこからの変化をつかむことができるように、この例を考えてみてください、TextFieldChangeListenerを追加することをお勧め:

import javafx.application.Application; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.Background; 
import javafx.scene.layout.BackgroundFill; 
import javafx.scene.layout.VBox; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 

public class CharByCharGrabbing extends Application { 

    @Override 
    public void start(Stage stage) throws Exception { 
     // create simple root and add two text fields to it 
     VBox root = new VBox(); 
     root.setAlignment(Pos.CENTER); 
     // just styling 
     root.setBackground(new Background(new BackgroundFill(Color.MAGENTA, null,null))); 

     TextField textField = new TextField(); 
     TextField textField1 = new TextField(); 

     root.getChildren().addAll(textField, textField1); 

     Scene scene = new Scene(root, 300,200); 
     stage.setScene(scene); 
     stage.setTitle("Grabbing Char by Char"); 
     stage.show(); 

     // Now you can add a change listener to the text property of the text field 
     // it will keep you updated with every single change (char by char) 
     // either adding to or removing from the TextField 
     textField.textProperty().addListener((observable, oldText, newText)->{ // lambda style 
      textField1.setText(newText); // update me when any change happens 
      // so you can grab the changes from here. 
     }); 

    } 

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

テスト

Test

+0

はい、これです。 'text'プロパティを聞いて、キーを押さないようにしてください!一部のシステムでは、マウスだけを使用してTextFieldのテキストを変更することもできます。 – VGR

+0

@VGR正確には、 'TextField'のテキストが変更されている限り、キーを押すかマウスを使って' TextField'の変更を取得します。 – Yahya

関連する問題