だから私は 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());
}
}