2012-02-04 58 views
3

我在我的應用程序中有一個JTable。我在表格上有一個自定義的渲染器設置(一個JTextArea,啓用了換行),它允許多行內容。在某些情況下,JTable單元格的內容預計會溢出單元格的邊界。我想要做到以下幾點:如何檢測JTable行邊界上的點擊?

而不是讓用戶拖動行邊框來調整單元格大小,我希望用戶能夠雙擊行邊框,所以當我檢測到這一點時,我可以自動調整大小單元格的高度(行的高度)以顯示單元格的全部內容。

我的問題是,檢測行邊界上雙擊的最佳方法是什麼?我已經得到了這個由設置在JTable中的MouseListener用的mouseClicked方法,看起來像這樣的工作:

public class MouseButtonInputListener extends MouseInputAdapter 
{ 
    private JTable fTable; 

    public MouseButtonInputListener(JTable parentTable) 
    { 
     fTable = parentTable; 
    } 

    @Override 
    public void mouseClicked(MouseEvent e) 
    { 

     // Some pre-processing here... 

     if(e.getClickCount() == 2 && 
      fTable.getCursor().getType() == Cursor.N_RESIZE_CURSOR) 
     { 
      // Auto-adjust row height to fit contents...    
     } 

    } 
} 

雖然這工作,我不是很高興與行:

fTable.getCursor().getType() == Cursor.N_RESIZE_CURSOR 

有更好的方法來做到這一點的任何建議?以上是所有平臺上的可靠方法嗎?

+0

會像['TablePopupEditor'](http://stackoverflow.com/a/3591230/230513)是替代? – trashgod 2012-02-04 20:14:46

+0

@trashgod,不太清楚這將如何幫助。我已經想出了「調整大小以適應大小」部分。我真的只想知道我檢測用戶是否點擊了單元格邊界的技術(當鼠標懸停在行邊界上時顯示調整大小的光標)是一種正確的/強大的技術。我可以期望在所有平臺上的光標懸停在行邊界上時是Cursor.N_RESIZE_CURSOR嗎? javadoc沒有提供其他信息,但我想要確認。 – eternaln00b 2012-02-04 21:46:02

+0

對,它不會幫助;我認爲@ camickr的例子是一個潛在的選擇。 Re'Cursor.N_RESIZE_CURSOR',我想你可以發佈[sscce](http://sscce.org/)並要求人們報告他們的發現。 – trashgod 2012-02-05 00:46:19

回答

2

經過一番網上搜索,我發現下面的頁面:

http://java.sun.com/products/jlf/ed2/book/HIG.Behavior.html

除其他事項外,它規定了在不同情況下的鼠標光標的行爲。根據「指針反饋」部分的說明,光標在N_RESIZE_CURSOR和S_RESIZE_CURSOR之間切換,具體取決於它是否是正在懸停的組件的上邊界或下邊界。有趣的是,在3個平臺中的2個(Mac和Windows)上,這些遊標完全相同。無論如何,我的代碼因此應閱讀:

@Override 
public void mouseClicked(MouseEvent e) 
{ 
    // Some pre-processing here. Determine row at mouse click location 
    int cursorType = fTable.getCursor().getType(); 
    if(e.getClickCount == 2 && 
     (cursorType == Cursor.N_RESIZE_CURSOR || cursorType == CURSOR.S_RESIZE_CURSOR)) 
    { 
     // Resize row appropriately. 
    } 
} 

這將適用於所有平臺。感謝大家的意見和評論。