我有一個TableView,其中有一堆已分配給它的數據。在此之後,我想遍歷所有行,檢查一些條件,然後根據該條件使用CSS爲每個條件繪製。爲什麼以下產生IndexOutOfBoundsException?相反,爲什麼我不檢索我想要的行?爲什麼我創建的數組是空的?無法從數據分配後從TableView中檢索所有行JavaFX
int i = 0;
for (Node n: tableViewPriority.lookupAll("TableRow")) {
System.out.println(n);
if (n instanceof TableRow) {
TableRow row = (TableRow) n;
System.out.println(row);
if (tableViewPriority.getItems().get(i).getPriority().equals("Low")) {
row.getStyleClass().add("tableViewGreen");
}
i++;
if (i == tableViewPriority.getItems().size())
break;
}
}
例外:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:89)
at app.controller.TableViewController.populateTable(TableViewController.java:356)
at app.controller.TableViewController.organizeTable(TableViewController.java:318)
at app.controller.TableViewController.assignTicketsToTable(TableViewController.java:236)
at app.controller.TableViewController.lambda$null$0(TableViewController.java:202)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
例外(我假設(tableViewPriority.getItems()。get(i)...)')表示'tableViewPriority.getItems()'是空的。但正如答案中所指出的那樣,這種方法根本不起作用(即使您先填充表格):一旦開始滾動表格視圖,沒有任何行將具有正確的樣式。使用'rowFactory'。 –
是的,我嘗試過使用RowFactory,但我無法檢索行。我需要包含數據的行來應用條件。 – santafebound
你不能「檢索行」。答案就是這一點。您需要創建行,以便在調用updateItem()方法時更新其樣式。您應該顯示您使用行工廠進行的嘗試。 –