我创建了一个值列表,我可以搜索这些值并从该列表中选择一个值。我希望能够从列表中选择多个值,并将它们存储在数组中以供以后迭代。
我已经使用了在线教程中的以下代码来创建我的可搜索列表:
package javafxapplication1;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
* @author ericjbruno
*/
public class JavaFXApplication1 extends Application {
ObservableList<String> entries = FXCollections.observableArrayList();
ListView list = new ListView();
public static void main(String[] args) {
launch(args);
}
public void start(Stage primaryStage) {
primaryStage.setTitle("Simple Search");
Button btn = new Button();
btn.setText("Choose");
btn.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
System.exit(0);
}
});
TextField txt = new TextField();
txt.setPromptText("Search");
txt.textProperty().addListener(
new ChangeListener() {
public void changed(ObservableValue observable,
Object oldVal, Object newVal) {
handleSearchByKey((String)oldVal, (String)newVal);
}
});
// Set up the ListView
list.setMaxHeight(180);
// Populate the list's entries
for ( int i = 0; i < 100; i++ ) {
entries.add("Item " + i);
}
entries.add("Eric J. Bruno");
entries.add("Joseph Bruno");
entries.add("Ashley Bruno");
entries.add("Brandon Bruno");
list.setItems( entries );
VBox root = new VBox();
root.setPadding(new Insets(10,10,10,10));
root.setSpacing(2);
root.getChildren().addAll(txt,list,btn);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
public void handleSearchByKey(String oldVal, String newVal) {
// If the number of characters in the text box is less than last time
// it must be because the user pressed delete
if ( oldVal != null && (newVal.length() < oldVal.length()) ) {
// Restore the lists original set of entries
// and start from the beginning
list.setItems( entries );
}
// Break out all of the parts of the search text
// by splitting on white space
String[] parts = newVal.toUpperCase().split(" ");
// Filter out the entries that don't contain the entered text
ObservableList<String> subentries = FXCollections.observableArrayList();
for ( Object entry: list.getItems() ) {
boolean match = true;
String entryText = (String)entry;
for ( String part: parts ) {
// The entry needs to contain all portions of the
// search string *but* in any order
if ( ! entryText.toUpperCase().contains(part) ) {
match = false;
break;
}
}
if ( match ) {
subentries.add(entryText);
}
}
list.setItems(subentries);
}
}
我不确定下一步该如何选择多个值或如何存储它们以备后用。
我试图调试代码,我必须了解下一步该怎么做,但是当我单击“选择”时,我的应用程序结束了。