2014-06-16 33 views
1

許多人可能知道,JList中的組件不可互動(您無法與它們交互),它們就像組件外觀的快照。我正在研究一個簡單的應用程序,JList是我想要的,除了列表中的組件應該是可交互的。創建一個可交互的JList

到目前爲止,我已經創建了這一點,通過一個簡單的AbstractListModel和ListCellRenderer:

screenshot

在JList中每個組件一個JPanel,正如你可以看到含有其它成分JProgressBar的一樣, JLable和JButton。唯一的問題是按鈕(和所有其他組件)不可互動。我怎樣才能解決這個問題 ?

注意:我不想單個列JTable!

+3

考慮使用佈局來生成一個垂直對齊的組件列表,而不是從SwingX或BoxLayout的VerticalLayout例如 – MadProgrammer

+0

@MadProgrammer我實際上確實有這樣一個計劃,以防萬一JList無法修復(使用JPanel與GridLayout是我的)。但我會等待這個問題的答案。 –

+1

我認爲你自己回答了,'JList'不可編輯,它不是可以設計的,並且試圖改造,是很多辛苦工作(是的,我實際上已經嘗試過)。你可以在JList上使用'MouseListener',找到被點擊的行,將'MouseEvent'翻譯成'ListCellRenderer'的上下文並確定被點擊的內容......但第一個選項是更快,更簡單(使用佈局管理器) – MadProgrammer

回答

1

我認爲你自己回答了,JList是不可編輯的,它不是可編程的,它並沒有被設計爲和試圖改造它,是很多辛勤工作(是的,我已經嘗試過)。

你「可能」在JList使用MouseListener,發現被點擊的行,翻譯MouseEvent是的範疇內ListCellRendererComponent和嘗試,並確定單擊了什麼......但是,這同樣是很多額外的工作,可以更容易地通過其他手段實現...

考慮使用佈局產生垂直排列的組件列表而不是從SwingX也許VerticalLayoutBoxLayout例如

1

添加此爲未來的人提供答案。 我剛碰到同樣的問題,使用JListListCellRenderer是非常棒的,如果你只需要自定義渲染項目,但不是全功能組件。

這是我做過什麼和作品一種享受:

panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 

,然後當我有我需要動態組裝面板中的信息列表:

public void build(List<Item> items){ 
    panel.removeAll(); 
    for(Item item: items){ 
     panel.add(new ItemEntry(item)); 
    } 
} 

包裝您在面板一個JScrollPane和它的工作就像以前只有你的所有控件現在將正常工作:)。