我正在开发一个跟踪一系列任务的内部应用程序。我想要一个简单的任务监视器,列出任务名称和任务的状态。我需要这个看起来有点好看,我不是设计师所以无论我做什么都会吮吸,但基本的文本显示不适用于项目要求。
我基本上尝试做的是显示类似于Firefox下载窗口,I-Tunes下载窗口的内容,我可以更多地命名,但它们看起来基本相同。在每个应用程序中,每个“进度面板”都是可选的。因此,为了实现这一点,我认为只使用一个JPanels列表就很简单,每个JPanels都有一个JProgressBar和一个JLabel,每个JPanel都可以接受焦点来确定是否选择了它。我认为这将是一项简单的任务,但如果我使用JList它只显示文本。然后我想我会在更大的面板中显示所有任务面板,但我无法让内部面板识别焦点。
这有什么模式吗?是否有我刚刚找不到的滚动标准解决方案?或者有更好的方法吗?我不想重新发明轮子,但我认为这只是简单。
答案 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
占用每行中的单个单元格,其中包含JProgressBar
和JLabel
。或者您可以使用与我刚才描述的结构相同的JList
。