2008-12-18 65 views
3

我正在開發一個可以跟蹤一堆任務的內部應用程序。我想要一個簡單的任務監視器來列出任務名稱和任務的狀態。我需要這樣看起來有點不錯,我不是設計師,所以無論我做什麼都會吸吮,但基本的文本顯示不適合項目需求。在Java Swing中,如何管理允許選擇多個面板的面板列表?

我基本上試圖做的是顯示類似於Firefox下載窗口,I-Tunes下載窗口,以及我可以命名更多,但他們都看起來基本相同。在每個應用程序中,每個「進度面板」都是可選的。所以爲了實現這一點,我認爲只需使用一個JPanel列表,每個JPanel都帶有一個JProgressBar和一個JLabel就可以了,每個JPanel都可以接受焦點來確定是否選中了它。我認爲這將是一件容易的事,但如果我使用JList,它只會顯示文本。然後,我想我會在一個更大的面板中顯示所有任務面板,但我無法讓內部面板識別焦點。

有沒有這樣的模式?是否有一個我沒有找到的滾動標準解決方案?還是有更好的方法來做到這一點?我不想重新發明輪子,但我認爲這會很簡單。

回答

8

這聽起來像你可能要找的是一個JList

可以通過先加入你的‘任務’到JList對象的ListModel添加項目到JList的(請參閱從Java教程的Create a Model部分),然後你要指定一個自定義ListCellRenderer這將接受你的「任務」並在JList上作爲JPanel在列表本身中渲染。這裏的關鍵是讓你的自定義ListCellRenderer能夠以JList的方式顯示你的「任務」,你想讓它顯示在JList上。

查看The Java Tutorials的How to Use Lists頁面的Writing a Custom Cell Renderer部分。它將描述如何使你的自定義ListCellRenderer,所以你可以代表你的「任務」任何你想要的。

爲了保持簡短,您將通過實現getListCellRendererComponent來實現ListCellRenderer接口,該接口將返回Component,該代碼表示​​您的任務在JList中。您可能想要在此方法中構建或實例化您的JPanel,並將其返回爲Component

+0

下面是一些簡單的代碼,顯示如何在JList中呈現JPanels,如在答案中所暗示的:http://www.rgagnon.com/javadetails/java-0203.html – 2008-12-18 15:56:54

0

怎麼樣JTable(可以設置爲允許多行選擇)具有內部JPanel佔據單個單元的每一行,它包含一個JProgressBarJLabel英寸或者您可以使用與我剛剛描述的結構相同的JList

1

做這種事情的標準方法是使用JTable(或JList)作爲容器。

您不必使用默認渲染fot表格單元格,但可以爲特定單元格指定您自己的渲染器。看看CellRenderer