java - JavaFX:如何根据列在搜索按钮单击时搜索 Tableview?
问题描述
我已将 csv 文件加载到 javafx 中的 tableview 中,并尝试根据帐号、地址、社区等在表中搜索属性。每个 Textfield 对应于特定的搜索目的以及下拉选择器。在我追求解决这个问题的过程中,我发现所有示例都积极过滤,因为我发现在按下搜索按钮时喜欢这样做。是否有适当的方法仅显示表中搜索的项目并在文本区域中显示信息?
表控制器:
public class FileGUI extends Application {
TableView table;
ObservableList<PropertyData> data;
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Property Assesments");
// For Label + table
// placed vertically (above one another)
VBox vb1 = new VBox(20); // set spacing between these nodes to 10
// For Label + text field
// placed vertically (above one another)
VBox vb2 = new VBox(20); // set spacing between these nodes to 5
// vb1 and vb2 will be placed horizontally
HBox hb = new HBox(150); // set spacing between vb1 and vb2 to 20
// set the scene
Scene scene = new Scene(hb, 1000, 1000);
//Set Text Labels
Label label1 = new Label("Property Data");
label1.setFont(new Font("Ariel",15));
createSimpleTable();
vb1.setAlignment(Pos.CENTER_LEFT);
vb1.getChildren().addAll(label1,table);
Label label2 = new Label("Find Property Assesment");
label2.setFont(new Font("Ariel", 15));
label2.setStyle("-fx-font-weight: bold;");
Label label3 = new Label("Account Number:");
label3.setFont(Font.font("Ariel", FontWeight.NORMAL, 12));
label3.setPadding(new Insets(10, 0, 0, 0));
TextField tf = new TextField();
Label label4 = new Label("Address (#suite #house street):");
label4.setFont(Font.font("Ariel", FontWeight.NORMAL, 12));
TextField tf2 = new TextField();
Label label5 = new Label("Neighbourhood:");
label5.setFont(Font.font("Ariel", FontWeight.NORMAL, 12));
TextField tf3 = new TextField();
Label label6 = new Label("Assessment Class:");
label6.setFont(Font.font("Ariel", FontWeight.NORMAL, 12));
//Set dropdown menu selection
MenuButton menuBtn = new MenuButton();
menuBtn.setPadding(new Insets(0, 0, 0, 100));
menuBtn.getItems().setAll(new MenuItem("Residential"), new MenuItem("Non Residential"), new MenuItem("Other Residential"));
Button search = new Button("Search");
Button reset = new Button("Reset");
reset.setTranslateX(70);
reset.setTranslateY(-37);
TextArea box = new TextArea();
box.setPadding(new Insets(0, 0, 0, 60));
vb2.setAlignment(Pos.CENTER_LEFT);
vb2.setSpacing(10);
vb2.setPadding(new Insets(13, 0, 0, 6));
vb2.getChildren().addAll(label2, label3, tf, label4, tf2, label5, tf3, label6, menuBtn, search, reset, box);
EventHandler<ActionEvent> searchAcc = new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
String accNumber = tf.getText();
}
};
hb.setAlignment(Pos.BASELINE_LEFT);
hb.getChildren().addAll(vb2, vb1);
primaryStage.setScene(scene);
primaryStage.show();
}
public void createSimpleTable() {
table = new TableView();
//Open file as class object
InitFile csvFile = new InitFile();
//Check if pathway provided by user exists, if not return default pathway
File pathName = csvFile.FileExists();
try {
//Read file line by line until EOF into Property data structure array
ArrayList<PropertyData> houses = csvFile.initializeFile(pathName);
data = FXCollections.observableArrayList(houses);
TableColumn acc = new TableColumn("Account");
acc.setMinWidth(90);
acc.setCellValueFactory(new PropertyValueFactory("accountNum"));
TableColumn add = new TableColumn("Address");
add.setMinWidth(180);
add.setCellValueFactory(new PropertyValueFactory("houseNum"));
add.setCellValueFactory(new PropertyValueFactory("suite"));
add.setCellValueFactory(new PropertyValueFactory("streetName"));
TableColumn assessedVal = new TableColumn("Assessed Value");
assessedVal.setMinWidth(120);
assessedVal.setCellValueFactory(new PropertyValueFactory("assessedVal"));
TableColumn assessClass = new TableColumn("Assessment Class");
assessClass.setMinWidth(120);
assessClass.setCellValueFactory(new PropertyValueFactory("assessClass"));
TableColumn nh = new TableColumn("Neighbourhood");
nh.setMinWidth(190);
nh.setCellValueFactory(new PropertyValueFactory("neighbourhood"));
TableColumn lat = new TableColumn("Latitude");
lat.setMinWidth(130);
lat.setCellValueFactory(new PropertyValueFactory("latitude"));
TableColumn lng = new TableColumn("Longitude");
lng.setMinWidth(130);
lng.setCellValueFactory(new PropertyValueFactory("longitude"));
table.setEditable(false);
table.setPrefWidth(920);
table.setPrefHeight(640);
table.getColumns().addAll(acc, add, assessedVal, assessClass, nh, lat, lng);
table.setItems(data);
} catch (Exception e) {
System.out.println("File not Found");
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
解决方案
推荐阅读
- javascript - 即使路径正确也无法访问 javascript 文件
- javascript - Discord JS Bot - 如何让我的机器人扫描传入消息中的关键字,然后断开用户与语音通道的连接
- angular - Angular openlayers:增加 DOM 节点
- python - AttributeError:“Simple_Imputer”对象在 PyCaret 中没有属性“fill_value_categorical”
- oop - 处理 DDD 中的多态行为
- javascript - 将函数中的字段设为 url
- android - Android Studio 抛出“No signature of method”错误,指向 build.gradle:app
- java - Windows JNI 在 dll 错误 java.lang.UnsatisfiedLinkError 中加载和执行 c++ 代码:
- javascript - 如何从另一个组件调用函数反应
- javascript - WebRTC:Safari 未检测到任何输出设备