동적 테이블과 뷰가있는 테이블 뷰를 만들고 싶습니다. 데이터 소스에서 값을 얻자 마자 백그라운드에서 각 셀 값을 업데이트하고 싶습니다. 이것은 내가 스윙에서 사용한 setValueAt()
입니다. 그래서 기본적으로 모델 열을 만들지 않으려 고합니다. 열이 고정되어 있지 않고 행이 고정되어 있지 않기 때문에 테이블보기에서 행을 하나씩 업데이트하기 위해 테이블 뷰를 다시 만들고 싶지 않기 때문에 가이드가 필요합니다. 새로운 javafx 뷰. the javadoc이 말한대로 당신이 다음 내 질문을 이해하지 않으면 경우,JAVAFX의 테이블 뷰에서 각 행의 값을 업데이트하는 방법
편집 예제 소스 코드 테이블 모델 항목입니다 보유 재산을
import javafx.application.Application;
import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.collections.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.stage.Stage;
import java.util.*;
public class DynamicTableView extends Application {
private static final int N_COLS = 5;
private static final int N_ROWS = 1000;
public void start(Stage stage) throws Exception {
TestDataGenerator dataGenerator = new TestDataGenerator();
TableView<ObservableList<String>> tableView = new TableView<>();
// add columns
List<String> columnNames = dataGenerator.getNext(N_COLS);
for (int i = 0; i < columnNames.size(); i++) {
final int finalIdx = i;
TableColumn<ObservableList<String>, String> column = new TableColumn<>(
columnNames.get(i)
);
column.setCellValueFactory(param -> new ReadOnlyObjectWrapper<>(param.getValue().get(finalIdx)));
tableView.getColumns().add(column);
}
// add data
for (int i = 0; i < N_ROWS; i++) {
tableView.getItems().add(
FXCollections.observableArrayList(
dataGenerator.getNext(N_COLS)
)
);
}
tableView.setPrefHeight(200);
Scene scene = new Scene(tableView);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
private static class TestDataGenerator {
private static final String[] LOREM = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tempus cursus diam ac blandit. Ut ultrices lacus et mattis laoreet. Morbi vehicula tincidunt eros lobortis varius. Nam quis tortor commodo, vehicula ante vitae, sagittis enim. Vivamus mollis placerat leo non pellentesque. Nam blandit, odio quis facilisis posuere, mauris elit tincidunt ante, ut eleifend augue neque dictum diam. Curabitur sed lacus eget dolor laoreet cursus ut cursus elit. Phasellus quis interdum lorem, eget efficitur enim. Curabitur commodo, est ut scelerisque aliquet, urna velit tincidunt massa, tristique varius mi neque et velit. In condimentum quis nisi et ultricies. Nunc posuere felis a velit dictum suscipit ac non nisl. Pellentesque eleifend, purus vel consequat facilisis, sapien lacus rutrum eros, quis finibus lacus magna eget est. Nullam eros nisl, sodales et luctus at, lobortis at sem.".split(" ");
private int curWord = 0;
List<String> getNext(int nWords) {
List<String> words = new ArrayList<>();
for (int i = 0; i < nWords; i++) {
if (curWord == Integer.MAX_VALUE) {
curWord = 0;
}
words.add(LOREM[curWord % LOREM.length]);
curWord++;
}
return words;
}
}
}
해답을 주셔서 감사합니다. 그러나 이것은 솔루션을 검색하는 동안 제가 잡은 예제입니다. 사용 사례가 완전히 무의미합니다. –
스윙의 setValueAt() 메소드와 같은 것이 필요합니다. –
Sorrry, 원하는 것을 얻은 것 같아요. 말할 수는 있지만 어떻게 구현해야하는지 이해할 수 없다면 가능하다면 위의 코드를 편집하여 보여 줄 수 있습니까? –