2017-11-29 41 views
-2

javafxを使用して作成したコードで、テーブルビューを作成してから別のファイルに挿入します。私は検索バーを実装しようとしています。私はGUI内のテーブルを検索して一致を表示できるようにしたい。どんな方向に?javafxで検索バーを作成する

編集:私はこの質問が広く、正確な答えを期待していなかったと理解しています。私は方向性を探していました。

+3

はStackOverflowのへようこそ。あなたの質問は、決定的な回答を持つ正確で具体的な質問に賛成する、このフォーラムでは広すぎます。サイトに貢献する質問の種類を投稿するには、[ツアー]に参加し、サイトの[ヘルプ]を見ることをおすすめします。 (それについては、http://code.makery.ch/blog/javafx-8-tableview-sorting-filtering/を参照してください。このチュートリアルでは、お探しの機能をカバーするチュートリアルがあります)。あなたが立ち往生するならば、コードを使って特定の質問を投稿してください。 –

+0

私はJamesに同意します。あなたの質問は広すぎます。私が通常行っているのは、['ChoiceBox'](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ChoiceBox.html)と[' TextField'](https: //docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TextField.html)。 'ChoiceBox'は私が検索するテーブルの列を選択できるようにします。 'TextField'は検索を行います。また、['FilteredList'](https://docs.oracle.com/javase/8/javafx/api/javafx/collections/transformation/FilteredList.html)を使用してテーブル項目を設定します。 – Sedrick

答えて

1

私はhereから変更されたサンプルアプリです。

ChoiceBox,TextFieldFilteredListを使用して、TableViewをフィルタするようにアプリを変更しました。 TextField'sonKeyReleasedは、現在の値ChoiceBox'sに基づくフィルタリングを行います。

コメント内のコメント。

import javafx.application.Application; 
import javafx.beans.property.SimpleStringProperty; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.collections.transformation.FilteredList; 
import javafx.geometry.Insets; 
import javafx.geometry.Pos; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.control.ChoiceBox; 
import javafx.scene.control.Label; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.TextField; 
import javafx.scene.control.cell.PropertyValueFactory; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.VBox; 
import javafx.scene.text.Font; 
import javafx.stage.Stage; 

public class TableViewSample extends Application 
{ 

    private TableView<Person> table = new TableView<Person>(); 
    private final ObservableList<Person> data 
      = FXCollections.observableArrayList(
        new Person("Jacob", "Smith", "[email protected]"), 
        new Person("Isabella", "Johnson", "[email protected]"), 
        new Person("Ethan", "Williams", "[email protected]"), 
        new Person("Emma", "Jones", "[email protected]"), 
        new Person("Michael", "Brown", "[email protected]") 
      ); 

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

    @Override 
    public void start(Stage stage) 
    { 
     Scene scene = new Scene(new Group()); 
     stage.setTitle("Table View Sample"); 
     stage.setWidth(450); 
     stage.setHeight(550); 

     final Label label = new Label("Address Book"); 
     label.setFont(new Font("Arial", 20)); 

     table.setEditable(true); 

     TableColumn firstNameCol = new TableColumn("First Name"); 
     firstNameCol.setMinWidth(100); 
     firstNameCol.setCellValueFactory(
       new PropertyValueFactory<Person, String>("firstName")); 

     TableColumn lastNameCol = new TableColumn("Last Name"); 
     lastNameCol.setMinWidth(100); 
     lastNameCol.setCellValueFactory(
       new PropertyValueFactory<Person, String>("lastName")); 

     TableColumn emailCol = new TableColumn("Email"); 
     emailCol.setMinWidth(200); 
     emailCol.setCellValueFactory(
       new PropertyValueFactory<Person, String>("email")); 

     FilteredList<Person> flPerson = new FilteredList(data, p -> true);//Pass the data to a filtered list 
     table.setItems(flPerson);//Set the table's items using the filtered list 
     table.getColumns().addAll(firstNameCol, lastNameCol, emailCol); 

     //Adding ChoiceBox and TextField here! 
     ChoiceBox<String> choiceBox = new ChoiceBox(); 
     choiceBox.getItems().addAll("First Name", "Last Name", "Email"); 
     choiceBox.setValue("First Name"); 

     TextField textField = new TextField(); 
     textField.setPromptText("Search here!"); 
     textField.setOnKeyReleased(keyEvent -> 
     { 
      switch (choiceBox.getValue())//Switch on choiceBox value 
      { 
       case "First Name": 
        flPerson.setPredicate(p -> p.getFirstName().toLowerCase().contains(textField.getText().toLowerCase().trim()));//filter table by first name 
        break; 
       case "Last Name": 
        flPerson.setPredicate(p -> p.getLastName().toLowerCase().contains(textField.getText().toLowerCase().trim()));//filter table by first name 
        break; 
       case "Email": 
        flPerson.setPredicate(p -> p.getEmail().toLowerCase().contains(textField.getText().toLowerCase().trim()));//filter table by first name 
        break; 
      } 
     }); 

     choiceBox.getSelectionModel().selectedItemProperty().addListener((obs, oldVal, newVal) -> 
     {//reset table and textfield when new choice is selected 
      if (newVal != null) 
      { 
       textField.setText(""); 
       flPerson.setPredicate(null);//This is same as saying flPerson.setPredicate(p->true); 
      } 
     }); 
     HBox hBox = new HBox(choiceBox, textField);//Add choiceBox and textField to hBox 
     hBox.setAlignment(Pos.CENTER);//Center HBox 
     final VBox vbox = new VBox(); 
     vbox.setSpacing(5); 
     vbox.setPadding(new Insets(10, 0, 0, 10)); 
     vbox.getChildren().addAll(label, table, hBox); 

     ((Group) scene.getRoot()).getChildren().addAll(vbox); 

     stage.setScene(scene); 
     stage.show(); 
    } 

    public static class Person 
    { 

     private final SimpleStringProperty firstName; 
     private final SimpleStringProperty lastName; 
     private final SimpleStringProperty email; 

     private Person(String fName, String lName, String email) 
     { 
      this.firstName = new SimpleStringProperty(fName); 
      this.lastName = new SimpleStringProperty(lName); 
      this.email = new SimpleStringProperty(email); 
     } 

     public String getFirstName() 
     { 
      return firstName.get(); 
     } 

     public void setFirstName(String fName) 
     { 
      firstName.set(fName); 
     } 

     public String getLastName() 
     { 
      return lastName.get(); 
     } 

     public void setLastName(String fName) 
     { 
      lastName.set(fName); 
     } 

     public String getEmail() 
     { 
      return email.get(); 
     } 

     public void setEmail(String fName) 
     { 
      email.set(fName); 
     } 
    } 
} 

enter image description here

関連する問題