2012-10-29 3 views
0

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

답변

1

그래서 내가이 일을하는 방법을 알아 낸 목록은 청취자입니다 JLabel과 JButton을 포함하는 JList를 사용하는 대신에. 방금 JTable을 사용했습니다. 첫 번째 열은 레이블이고 두 ​​번째 열은 확인란입니다 (제 경우에는 목록에서 어떤 것을 켤 필요가 있습니다).

그리고 그 JTable을 사용하려면 OnColumnClick 이벤트와 OnRowClick 이벤트가 필요했습니다. 동일한 버튼을 여러 번 호출 할 수 있으려면 OnColumnClick에서 같은 행의 다른 열을 선택하기 만하면됩니다.