2015-04-02 28 views
1

我想用自定義標題渲染器(旋轉的2行文本)顯示JTable。
Paint()在getPreferredSize()後調用

用於設置自定義呈現僞代碼:

table.getColumnModel().getColumn(0..colCount).setHeaderRenderer(new TableCellHeaderRendererGraphics()); 

TableCellHeaderRendererGraphics擴展DefaultTableCellRenderer

這裏的方法paint(Graphics g)getPreferredSize()被覆蓋。在paint我做了一些與文本,字體,Graphics2D和AffineTransform東西旋轉文本,並顯示粗體和平原兩行。

問題是在paint(Graphics g)之前調用getPreferredSize()

問:在我有機會計算尺寸Graphics僅在paint()中引用之前,我如何返回首選尺寸?

+2

你不能:P,這就是API的工作原理。你可以直接詢問組件的'FontMetrics',看看它是否有效 – MadProgrammer 2015-04-02 07:28:37

+0

我認爲我可以在這裏看到一個設計缺陷 - 繪製它時計算組件大小?當你要畫畫時,你現在應該已經畫好了什麼,所以你必須知道所有的界限。你爲什麼不用專門的方法來計算你的大小,比如get * size()。您可以始終實現自己的佈局管理器,僅用於此單個組件。 – Antoniossss 2015-04-02 08:56:36

+0

@MadProgrammer:thx,我想我會在你的小費後繼續工作。第一次測試給了我希望。 JLabel FontMetrics可以在沒有Graphics2D的情況下計算文本長度,高度可以是固定值 - 適用於我。 – chris 2015-04-02 09:05:40

回答

0

我能回答我的問題:

它可以計算出所需要的矩形的大小沒有Graphics上下文。使用組件(在這種情況下爲JLabel)方法getFontMetrics()
在這個類中使用stringWidth(txt)來獲取文本的寬度。
文本的高度可以通過getFontMetrics().getHeight(),.getAscent(),.getDescent()請求。

相關問題