2014-10-01 87 views
2

我想使用Table Menu Button(table.setTableMenuButtonVisible(true);)隱藏和顯示TableView中的指定列。當我取消選擇所有列時,[+]按鈕隱藏,「表中沒有列」彈出,用戶無法顯示任何列。JavaFX防止TableMenuButton隱藏所有列

我試圖通過聽table.getVisibleLeafColumns()並顯示最後一個隱藏列來防止隱藏所有列,但是然後在菜單按鈕的ChoiceBox中未選中此列。

+0

對我來說看起來像一個錯誤:頭文件應該在無列所有和不可見列應有的用戶隱藏之間做出區別。好奇:你想禁用隱藏最後一個可見的列,或讓用戶隱藏它仍然可以訪問的按鈕? – kleopatra 2014-10-02 09:11:49

+0

這兩種情況對我來說都是合適的 - 只是不要帶走用戶的交互。現在我使用'TableColumn'上的自定義'ContextMenu'來完成它,它被添加到列標題並禁用取消選擇最後一列。我認爲它(菜單按鈕)不應該消失,當你取消選擇所有列。我知道我可以將超鏈接或按鈕添加到(表格)佔位符,它顯示所有列,但它看起來不太好,當表格中沒有數據時也會彈出佔位符。 – Mati 2014-10-02 11:20:24

+0

嗯...驚訝的是沒有列屬性isHideable(或我沒有看到它) - 你可以顯示你的實驗代碼,正在聽visibleLeafColumns? – kleopatra 2014-10-02 13:46:20

回答

1

絕對是一個錯誤(你可能會考慮在fx'jira中報告它)。你在你的問題中提到的,各地的黑客似乎與搖擺借來一個小竅門工作:延遲能見度回覆到一些未來:

ListChangeListener<? super TableColumn> visibleColumnsListener = c -> { 
    while (c.next()) { 
     // very last remove 
     if (c.wasRemoved() && !c.wasReplaced()) { 
      TableColumn column = c.getRemoved().get(0); 
      // delay reverting visibility 
      Platform.runLater(() -> { 
       column.setVisible(true); 
      }); 
     } 
    } 
}; 

它可能會比其在Swing模擬髒,不過,執行可運行程序處於「未來某些未指定的時間」,並且沒有聲明它與正常(源自ui)事件的關係。

報告爲RT-38907,只是固定的(重複的:RT-37616),應該在一兩週內以8u40ea的速度上升。