0

だから私は JList を持っていて、各行は JButton の後に jLabel が続きます。そして、私がする必要があるのは、ボタンをクリックすると関数が呼び出されることですが、現在、行をクリックすると別の関数が呼び出されます。

問題は、listselectionlistener の関数内に入ることです。したがって、ボタン リスナーは呼び出されません。リストリスナーを削除しようとしましたが、ボタンが1つだけになりましたが、機能しませんでした。おそらくリストのリスナーで、クリックがどこで行われたかを確認できると考えていましたが、それが正しい方法だとは思いません。

何か案が?

これが私のクラスの定義方法です

public class SelectScheduleUI extends JPanel implements ListCellRenderer<JPanel>, ListSelectionListener, ActionListener

フレームの一部を作成するときのコードは次のとおりです。

m_Schedules = new DefaultListModel<JPanel>();
m_SchedulesList = new JList<JPanel>(m_Schedules);

m_SchedulesList.addListSelectionListener(this);

後でリストの各要素を追加するとき。

JPanel schedulePanel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();

JButton enabledLabel = new JButton();   
enabledLabel.setBounds(0, 0, ICON_WIDTH, ICON_HEIGHT);
enabledLabel.setBorder(null);
enabledLabel.addActionListener((ActionListener) this);
schedulePanel.add(enabledLabel, c, LABEL_ICON);

JLabel label = new JLabel();
label.setText(p_SchedulerName);
label.setBounds(0, 0, LABEL_NAME_WIDTH, ICON_HEIGHT);
schedulePanel.add(label, c, LABEL_NAME);

m_Schedules.addElement(schedulePanel);

ボタンクリックイベントのダミー手順があります

public void actionPerformed(ActionEvent e)
{
    //Execute when button is pressed
    System.out.println("You clicked the button");
}

そして、これがリストのリスナーです

@Override
public void valueChanged(ListSelectionEvent e)
{
    if(e.getValueIsAdjusting() == false)
    {
        //if the user didn't select anything, or is in the 
        //  process of selecting multiple items, don't update
        if(m_SchedulesList.getSelectedIndex() == -1 || 
                m_SchedulesList.getSelectedIndices().length > 1)
        {
            return;
        }
        m_Selector.onScheduleSelect(m_Schedules.get(m_SchedulesList.getSelectedIndex()).getName());
    }
}
4

1 に答える 1

1

そこで、JLabel と JButton を含む JList を使用する代わりに、これを行う方法を考え出しました。最初の列はラベルで、2番目の列はチェックボックスです(私の場合、リストから何かをオンまたはオフにするために何かが必要でした)。

その JTable には、OnColumnClick イベントと OnRowClick イベントが必要でした。同じボタンを複数回呼び出すことができるようにするには、OnColumnClick 内の同じ行の他の列を選択するだけです。

于 2012-11-13T21:26:37.957 に答える