我想使用一个更复杂的渲染器,其中包含列表的多个组件(更准确地说,像 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 的一部分。作为替代方案,可以使用带有自定义渲染器和编辑器的 JTable
。 JRadioAsRendererEditor
是一个添加包含单选按钮的 StatusPanel
的示例。当然,你也可以使用multi-column table ,也是。
关于java - 使用按钮作为列表的渲染器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11408971/