2012-05-14 2 views
0

HashLists가있는 ArrayList의 크기에 따라에서와 같이 일부 동적 메뉴가 필요한 메뉴 모음이있는 JFrame이 있습니다. 여기서 문제는 동적 인 JMenuItem을 얻었 기 때문에 HashLists만큼 많은 변수를 얻을 수있는 방법이 필요하다는 것입니다. 이 경우 정적 변수의 이름을 만들었지 만 모든 MenuItem에 동일한 ActionListener가 있으므로 분명히 ActionListener에서 작동하지 않습니다.Java : HashMaps를 사용하여 ArrayList에서 JMenuItem 반복하기

이 문제를 해결하는 방법과 모든 고유 한 actionlisteners가있는 menuitems의 동적 인 양을 가진 메뉴를 얻는 방법에 대해 궁금합니다.

private ArrayList<HashMap> menuLijst; 

.

for (HashMap h : menuLijst) { 
     String vraag = (String) h.get("vraag"); 
     JMenuItem qMenu = new JMenuItem(vraag); 
     informatie.add(qMenu); 
     qMenu.addActionListener(this); 
    } 

미리 감사드립니다.

+1

메뉴 항목을 클릭했을 때 무엇을하고 싶습니까? –

+0

예를 들어, 현재 프레임에 테이블이나 다이어그램을 표시하는 동작이 필요합니다. –

답변

1

ActionListener에서 수행 할 작업에 따라 this을 사용할 수 있으며 actionPerformed에서 ((JMenutItem)event.getSource())을 사용하여 클릭 한 메뉴 항목을 확인할 수 있습니다. 메뉴가 있기 때문에 다른 방법으로는 다음과 같이 많은 ActionListener를 등록 수 :

for (final HashMap h : menuLijst) { 
    final String vraag = (String) h.get("vraag"); 
    final JMenuItem qMenu = new JMenuItem(vraag); 
    informatie.add(qMenu); 
    qMenu.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent event) { 
       // here event.getSource() is the same as qMenu 
       System.out.println("Menu "+qMenu+" with label "+vraag+" has been pressed"); 
       System.out.println("HashMap is "+h); 
     } 
    }); 
} 

그러나 나에게 (그리고 이전의 질문을보고) 당신이 HashMap의 사용을 남용하는 대신 새 적절한 사용하는 것 같다을 사물. 당신이 다음 클래스 만들 수 있습니다, "등급"을 "견적 요청", "답": 나는의 당신이 3 키를 가지고 있다고 가정 해 봅시다, 그 밖의 무엇을 당신의 HashMap에 모르는

public class MyClass { 
    private String vraag; 
    private String answer; 
    private int grade; 

    // And getters and setters here. 
} 

을 그리고 List<MyClass>List<HashMap> 대신.

+0

"목록 대신 목록이 있습니다." ? –

+0

@TimLagerburg 죄송합니다, 타이핑을 막지 못하게하는 backtik을 넣는 것을 잊었습니다. –

+0

문제 없습니다. 솔루션의 일부가 될 것이라고 생각하십시오. –

0

String에 HashMap을 사용하려는 이유가 표시되지 않습니다. 문자열의 ArrayList를 저장하고 루프를 반복하여 메뉴에 모두 추가하면 지금하는 것처럼 actionListeners를 모두에 추가 할 수 있습니다.

ActionListener에서 ArrayList를 반복하고 클릭 한 버튼의 이름과 비교하여 클릭 한 버튼을 확인하십시오.

+0

그 문자열 옆에있는 해시 목록에 더 많은 데이터가 있기 때문입니다. 그 데이터는 내가 actionlistener와리스트를 비교할 때 전화하기를 원했을 것입니다. –

+0

OK, 그런 부분은 신경 쓰지 마세요. 여전히 ActionListener에서 ArrayList에있는 HashMaps의 문자열과 비교하여 클릭 한 버튼을 확인할 수 있습니다. – Hidde

+0

나는 내 길을 찾았습니다. 도움을 청합니다. –

관련 문제