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

问题描述:

我正在开发一个可以跟踪一堆任务的内部应用程序。我想要一个简单的任务监视器来列出任务名称和任务的状态。我需要这样看起来有点不错,我不是设计师,所以无论我做什么都会吸吮,但基本的文本显示不适合项目需求。在Java Swing中,如何管理允许选择多个面板的面板列表?

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

有没有这样的模式?是否有一个我没有找到的滚动标准解决方案?还是有更好的方法来做到这一点?我不想重新发明*,但我认为这会很简单。

这听起来像你可能要找的是一个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

怎么样JTable(可以设置为允许多行选择)具有内部JPanel占据单个单元的每一行,它包含一个JProgressBarJLabel英寸或者您可以使用与我刚刚描述的结构相同的JList

做这种事情的标准方法是使用JTable(或JList)作为容器。

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