java - 使用按钮作为列表的渲染器

标签 java swing jython jlist

我想使用一个更复杂的渲染器,其中包含列表的多个组件(更准确地说,像 this (面板中排列了一些按钮的文本字段输入)。但是,当我尝试使用列表中的按钮时它似乎忽略了点击。

最小示例

from javax.swing import DefaultListCellRenderer
from javax.swing import DefaultListSelectionModel
from javax.swing import JButton
from javax.swing import JLabel
from javax.swing import JPanel
from javax.swing import JList
from javax.swing import JFrame


def printer():
    print "pressed the button"

class cellRenderer(DefaultListCellRenderer):



    def getListCellRendererComponent(self, theList, value, index, selected, hasFocus):
        renderer = DefaultListCellRenderer.getListCellRendererComponent(self, theList, value, index, selected, hasFocus)

        if selected:
            pan = JPanel()
            pan.add(JLabel('beer'))
            pan.add(JButton('get one', actionPerformed=printer))
            renderer = pan

        return renderer

panel = JFrame('example', size=(200,200))

configurations = JList([1,2,3,4],
                       cellRenderer = cellRenderer(),
                       selectionMode = DefaultListSelectionModel.SINGLE_SELECTION )

panel.add(configurations)
panel.visible = True

编辑:按照建议添加了最小示例。更新了问题,因为在最小示例创建过程中解决了原始问题

最佳答案

单独的渲染器是不够的;您还需要一个编辑器,它不是 JList API 的一部分。作为替代方案,可以使用带有自定义渲染器和编辑器的 JTableJRadioAsRendererEditor是一个添加包含单选按钮的 StatusPanel 的示例。当然,你也可以使用multi-column table ,也是。

关于java - 使用按钮作为列表的渲染器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11408971/

相关文章:

JavaFX 8 Swing 兼容性

java - 更改Java中某种类型的所有对象的属性

java - 如何从嵌入式 Jython 中调用 java 函数?

java - 由于创建 bundle 失败,我无法在 Eclipse 中部署 JavaFX 项目

java - 如何使用 ReJson 在 Redis 中存储复杂的 Json

java - 在 JScrollPane 上设置滚动条

java - Jython 作为 Java 游戏的游戏内控制台

java - 如何诊断脚本语言中发生的 Java ClassNotFound 异常,而不是 Java 代码中发生的异常

java - Selenium Webdriver 继续通过多个类

java - 更新 JPanel 图形时出现无限循环