带有自定义渲染器的JList

Ahm*_*saf 3 java swing jpanel jlist

我有一个显示多个JPanel的JList,我创建了一个返回新JPanel的自定义渲染器.JPanels显示在JList中,但是它们无法访问,我无法选择它们,如果我有一个按钮或文本区域,我就无法按下它.我想尝试,如果这在JList中工作,因为我想做进一步的分页.我设法通过向Jscroll窗格添加面板来使其工作,但是希望使JList工作正常.

谢谢

bar*_*jak 12

这是的正常行为JList(和JTabel,JComboBox等...).

JPanel您的自定义渲染的回报不会被添加到Swing的层次结构.只有它的paint方法JList才能在适当的位置绘制渲染器.渲染器只是一个标记,你在其中看到的JList不是组件,而是组件的图像.

这是在屏幕上显示许多组件的有效方式,而没有真实实例化组件的开销.请注意,您的渲染器可以始终返回相同的实例(甚至更可取).

有关更多详细信息,请参阅Swing教程.

如果您希望其条目JList像真实组件一样,您可以执行以下操作.首先,使用a JTable而不是a JList.JTable带有一列而没有标题的A 与a大致相同JList.为什么用JTable?因为JTable提供编辑.编辑器JTable就像Renderers一样注册了.当用户点击JTable的单元格时,通常会出现编辑器.编辑器叠加在渲染器上,这次它是一个真实的组件.如果渲染器和编辑器组件相同,则用户感觉JTable的单元是真实组件.

Swing指南对这种技术的例子.