在Java Swing中,如何管理允许选择多个面板的面板列表?

时间:2008-12-18 15:21:33

标签: java swing jpanel jlist

我正在开发一个跟踪一系列任务的内部应用程序。我想要一个简单的任务监视器,列出任务名称和任务的状态。我需要这个看起来有点好看,我不是设计师所以无论我做什么都会吮吸,但基本的文本显示不适用于项目要求。

我基本上尝试做的是显示类似于Firefox下载窗口,I-Tunes下载窗口的内容,我可以更多地命名,但它们看起来基本相同。在每个应用程序中,每个“进度面板”都是可选的。因此,为了实现这一点,我认为只使用一个JPanels列表就很简单,每个JPanels都有一个JProgressBar和一个JLabel,每个JPanel都可以接受焦点来确定是否选择了它。我认为这将是一项简单的任务,但如果我使用JList它只显示文本。然后我想我会在更大的面板中显示所有任务面板,但我无法让内部面板识别焦点。

这有什么模式吗?是否有我刚刚找不到的滚动标准解决方案?或者有更好的方法吗?我不想重新发明轮子,但我认为这只是简单。

3 个答案:

答案 0 :(得分:8)

听起来你可能正在寻找的是JList

您可以首先将“任务”添加到JList对象的ListModel,然后将您的项目添加到JList(请参阅The Java Tutorials中的Create a Model部分),然后您需要分配一个自定义ListCellRenderer,它将接受您的“任务”,并在JList上呈现为列表中的JPanel。这里的关键是让您的自定义ListCellRenderer能够以JList的方式在JList显示您的“任务”。

查看The Java Tutorials的Writing a Custom Cell Renderer页面中的How to Use Lists部分。它将描述如何制作您的自定义ListCellRenderer,以便您可以将您的“任务”表示为您想要的任何内容。

为了简短起见,您将通过实施ListCellRenderer来实施getListCellRendererComponent界面,Component将返回{{3}},{{3}}代表JList中的任务。您可能希望在此方法中构造或实例化JPanel并将其作为Component返回。

答案 1 :(得分:1)

执行此类操作的标准方法是使用JTable(或JList)作为容器。

您不必使用默认渲染表格单元格,但您可以为特定单元格指定自己的渲染器。看看CellRenderer

答案 2 :(得分:0)

如果JTable(您可以设置为允许选择多行),内部JPanel占用每行中的单个单元格,其中包含JProgressBarJLabel。或者您可以使用与我刚才描述的结构相同的JList