所以我有一个JList,每一行都是一个JButton,后跟一个jLabel。我需要做的是,当我单击按钮时它会调用一个函数,但现在无论我单击该行,它都会调用另一个函数。
问题是它进入了listselectionlistener的函数内部。所以按钮监听器永远不会被调用。我试图删除列表侦听器,只使用一个按钮,但它不起作用。我在想也许在列表的侦听器中,我可以验证点击是在哪里完成的,但我认为这不是正确的做法。
任何想法?
这是我如何定义我的班级
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());
}
}