데이터베이스의 "남성"사람과 같은 특정 정보 만 테이블보기에 표시하고 싶습니다. 나는 javafx를 사용할 때만이다. 사전에 도움을 주셔서 감사합니다.javafx의 데이터베이스에서 표시 할 데이터 필터링
이 내 현재 테이블 내가 만 열 수 있도록 테이블을 필터링하고 싶은
이다 "주문 상태 : 지불은"표에 표시됩니다.
데이터베이스의 "남성"사람과 같은 특정 정보 만 테이블보기에 표시하고 싶습니다. 나는 javafx를 사용할 때만이다. 사전에 도움을 주셔서 감사합니다.javafx의 데이터베이스에서 표시 할 데이터 필터링
이 내 현재 테이블 내가 만 열 수 있도록 테이블을 필터링하고 싶은
이다 "주문 상태 : 지불은"표에 표시됩니다.
java 8을 사용할 수있는 경우 기본 제공 FilteredList 및 술어를 사용할 수 있습니다. 다음은 정규식 필터링을 테스트하기 위해 작성한 것입니다. 나는 당신의 예제와 더 비슷해지고 필요할 경우 javafx 2.2를 사용하기 위해 약간 수정했다. 그냥 자바에게 8
import javafx.application.Application;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
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.VBox;
import javafx.stage.Stage;
public class TableTest extends Application {
@Override
public void start(Stage primaryStage) {
ObservableList<LineItem> items = FXCollections.observableArrayList();
items.addAll(new LineItem("hello",123.45),
new LineItem("paid in full",0.01),
new LineItem("paid",0.01),
new LineItem("due",0.01),
new LineItem("paid",0.01));
//for java8
//FilteredList<LineItem> filteredItems = new FilteredList(items, e->true);
//not java8
ObservableList<LineItem> filteredItems = FXCollections.observableArrayList(items);
TableView tableView = new TableView(filteredItems);
TableColumn<LineItem,String> descCol = new TableColumn<>("desc");
descCol.setCellValueFactory(new PropertyValueFactory<>("desc"));
TableColumn<LineItem, Double> amountCol = new TableColumn<>("amount");
amountCol.setCellValueFactory(new PropertyValueFactory<>("amount"));
tableView.getColumns().addAll(descCol,amountCol);
TextField filterText = new TextField();
filterText.setPromptText("type filter and press enter");
filterText.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
//normal java8
//filteredItems.setPredicate(li -> li.desc.getValue().contains(filterText.getText()));
//regex java 8
//filteredItems.setPredicate(li -> li.desc.getValue().matches("(?i)"+filterText.getText()));
//not javafx 8
filteredItems.clear();
for (LineItem li: items)
if (li.desc.getValue().contains(filterText.getText()))
filteredItems.add(li);
}
});
VBox root = new VBox();
root.getChildren().addAll(tableView, filterText);
Scene scene = new Scene(root, 300, 300);
primaryStage.setTitle("Filter table test");
primaryStage.setScene(scene);
primaryStage.show();
}
public class LineItem {
private final StringProperty desc = new SimpleStringProperty();
private final DoubleProperty amount = new SimpleDoubleProperty();
public StringProperty descProperty() {return desc;}
public DoubleProperty amountProperty() {return amount;}
public LineItem(String dsc, double amt) {
desc.set(dsc); amount.set(amt);
}
}
}
잭을 사용하는 주석 라인의 일부를 변경,이 가정으로 predicateProperty을 결합하는 방법입니다,하지만 난 그것을 알아낼 수 없습니다.
편집 : 당신은 당신이 테이블에 우리에게 좀 더 많은 데이터를 제공 할 수
filteredItems.predicateProperty().bind(
Bindings.createObjectBinding(() ->
li -> li.desc.getValue().contains(filterText.getText()),
filterText.textProperty())
);
@James_D 고마워, 잘 작동합니다. – brian
모든 키 누름에서 성능에 대해 걱정했기 때문에 술어 바인딩 사용에 관심이 없었습니다. 난 그냥 25000 라인에 일치하는 정규식으로 시도하고 그것은 순간 보인다. cpus를 잠깐 살펴보면 javafx 스테이지를 마우스로 mousing하는 것보다 적은 용도로 사용할 수 있습니다. – brian
작동 방식 (나는 믿는다)은 모든 키를 누를 때 predicates 속성이 변경되어 items 속성이 유효하지 않은 것으로 표시된다는 결과를 낳습니다. 그런 다음 각 프레임 렌더링에서 잘못된 속성을 관찰하고 필터링 된 목록과 렌더링 된 셀을 다시 계산합니다. 아무리 빨리 입력해도 정규 표현식 검색은 프레임 당 최대 한 번만 수행됩니다. 즉, 초당 60 회입니다. 이는 대부분의 시스템에서 25K 정규 표현식을 계산할 충분한 시간 이상입니다. –
Javafx 2.0 이상을 사용하는 경우 사용자 정의 테이블 뷰 필터를 작성하거나 javafx_filterable_columns을 사용할 수 있습니다. 사용자 정의 테이블 필터의 경우, 설비가 붙박이입니다 수 있습니다, 쓰기 필터 Javafx8에서
http://code.makery.ch/blog/javafx-8-tableview-sorting-filtering/
에 아주 좋은 방법을 제공이 링크를 따를 수 있습니다. 그러나, 개인적으로 사용한 적은 한번도 없기 때문에 확실하지 않습니다!
같은, 대신의 ActionEvent의 핸들러의 결합, 무언가를 원한다면? 현재 질문에 따라 SQL 쿼리에서 쉽게 얻을 수 있습니다! – ItachiUchiha
@ItachiUchiha Ive가 테이블 그림을 추가했습니다. – Lycon
이것이 현재 디스플레이입니다. 'ORDER STATUS'를 기준으로 데이터를 필터링하고 싶습니까? – ItachiUchiha