그래서 저는 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());
}
}