我需要顯示研究項目的基本圖形元素。這些元素將顯示爲一個網格(例如128×128的正方形,每個正方形包含不同的元素)。顯示網格的最佳方法?
該應用程序的顯示部是繼發於背後的邏輯,所以我正在尋找顯示這樣的柵格的最簡單的方式(同時使用搖擺)。我認爲JTable到目前爲止,但似乎笨重。我本來希望使用基於Web的東西,但不適合應用程序。
在基本Java/Swing中是否有任何庫或更好的組件用於繪圖?
我需要顯示研究項目的基本圖形元素。這些元素將顯示爲一個網格(例如128×128的正方形,每個正方形包含不同的元素)。顯示網格的最佳方法?
該應用程序的顯示部是繼發於背後的邏輯,所以我正在尋找顯示這樣的柵格的最簡單的方式(同時使用搖擺)。我認爲JTable到目前爲止,但似乎笨重。我本來希望使用基於Web的東西,但不適合應用程序。
在基本Java/Swing中是否有任何庫或更好的組件用於繪圖?
我需要顯示一個研究項目的基本圖形元素。這些 元素將顯示爲一個網格(例如128 X 128個正方形,每個正方形包含不同元素的 )。
我可能會說對JTable
的唯一工作是設計爲每列都是相同的對象類型。
這並不意味着它是不可能的,但它需要與細胞渲染處理和更新個人價值更多的工作。
我希望能夠輕鬆地訪問座標網格上的元素,
這取決於你的初始入口點。例如,如果你只有一個鼠標一點,你可以問表的行和列表示給定的點,例如...
Point p = mouseEvent.getPoint();
int row = table.rowAtPoint(p);
int col = table.columnAtPoint(p);
一旦你有,你可以簡單地讓細胞使用類似的表值...
Object cellValue = table.getValueAt(row, col);
重繪只有特定的細胞
一般情況下,這可以通過實現,它應該通知表格表格的某些部分已更新並應重新繪製。
例如,在AbstractTableModel
中,有許多「事件」方法可用於生成事件,以告訴表格模型的某些部分已更改。
例如,您可以使用public void fireTableCellUpdated(int row, int column)來告訴表格,指定的單元格已更改,表格將通過重新繪製給定的單元格對其作出反應。這通常由模型調用。
我想我必須將邏輯轉換爲渲染代碼(或使用包裝器)。
表API(實際上Swing中的許多高級組件)使用「渲染器」來允許程序定義應該如何顯示組件中的某些元素。
看看Using custom renderers瞭解更多詳情...
一般來說,JTable
是一個複雜的API,但其複雜性來自它的靈活性。您使用的越多,使用它的用途就越多......
詳細瞭解How to use tables瞭解更多詳情。
優秀和詳細的答案。感謝您抽出寶貴的時間! JTable是。 – Eugen
'JTable'是令人難以置信的強大API,值得花時間學習,即使它不能滿足您的要求,也會花費時間;) – MadProgrammer
請解釋您爲什麼認爲基於JTable的實現「* clunky *」。 –
我可能沒有想到它是正確的,但它感覺像JTable不提供我想要的靈活性。我希望能夠通過座標輕鬆訪問網格上的元素,只重繪那個特定的單元格,我想我必須將邏輯移動到呈現代碼中(或使用包裝器)。總而言之,我試圖弄清楚JTable的實現是否會在長期運行中導致更少的麻煩,而不是像偏移佈局那樣的問題。 – Eugen
好吧,也有'GridLayout',但像@ PM77-1,我的第一個想法是'JTable'。 –