2

リストのいくつかのコンポーネントで構成されるより複雑なレンダラーを使用したいと思います(より正確には、このようなもの(パネルにいくつかのボタンが配置されたテキストフィールド入力)。ただし、リストでボタンを使用しようとすると、クリックが無視されるようです.

最小限の例

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

編集:提案された最小限の例を追加しました。元の問題は最小限の例の作成中に解決されたため、質問を更新しました

4

1 に答える 1

2

レンダラーだけでは不十分です。JListAPIの一部ではないエディターも必要です。別の方法として、JTableカスタム レンダラーとエディターで を使用します。含むラジオ ボタンJRadioAsRendererEditorを追加する例です。StatusPanelもちろん、複数列のテーブルも使用できます。

于 2012-07-10T11:20:26.290 に答える