, 당신은 즉시 방법의 지역 변수에 버튼 인스턴스를 저장 의미하는 것 같다. 이것을 피하려고하면 코드를 읽기가 어려워 질 수 있습니다. 그러나 귀하의 질문에 대한 답변 :
가장 확실한 방법은 이전이지만 새로 인기있는 이중 중괄호 관용구를 사용하는 것입니다.
alphabetPanel.add(new JButton("<html><center>" + (char)i) {{
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
...
}
});
}});
참고로,이 경우 최종본이 아니기 때문에 익명의 내부 클래스에서 사용할 수 없습니다. 다른 변수 (최종 변수)에 할당하거나 루프를 재구성하십시오.
다른 경로는 액션을 거쳐야합니다. (그들은 가난한 사람의 해시 테이블을 jsut대로 보통 나는 작업을 피하는 게 좋을 것 ButtonModel에 그래도 "좋은"입니다..)
alphabetPanel.add(new JButton(new AbstractAction("<html><center>" + (char)i) {
public void actionPerformed(ActionEvent event) {
...
}
}));
그런 다음 물론 응용 프로그램 특정 라이브러리 방법이있다 :
Form alphabetForm = new Form(alphabetPanel);
for (char c='A'; c <= 'Z'; ++c) {
alphabetForm.button("<html><center>" + c, new ActionListener() {
public void actionPerformed(ActionEvent event) {
...
}
});
}
에 대한 내가 생각한 어떤 이유로 동작 리스너가 작동하는 것은 그것이 만들어진 후에 동작이 수행 될 때까지 코드에서 멈춘다는 것이지만, 그 동작의 전체 목적을 상실한 것 같다. 나는 그것을 바 꾸었고 내가 원했던 것과 똑같이 작동했다. 감사! P. html은 과잉이었다. – Tomek