我想使用一个更复杂的渲染器,它包含一些列表的组件(更准确地说是this(一个textfieldinput,其中一些按钮排列在一个面板中)。但是当我尝试使用一个按钮时列表似乎忽略了点击次数。
最小例子
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
修改:根据建议添加了最少的示例。更新的问题,因为在最小的示例创建期间解决了原始问题
答案 0 :(得分:2)
单独一个渲染器是不够的;您还需要一个编辑器,它不属于JList
API。或者,将JTable
与自定义渲染器和编辑器一起使用。 JRadioAsRendererEditor
是添加包含单选按钮的StatusPanel
的示例。当然,您也可以使用multi-column table。