다른 익명의 클래스의 익명 수업에서 "이름없는"Jbutton에 액세스 하시나요?
-
08-07-2019 - |
문제
나는 26을 만들었다 Jbutton 익명으로 actionListener
알파벳의 각 문자로 표시됩니다.
for (int i = 65; i < 91; i++){
final char c = (char)i;
final JButton button = new JButton("" + c);
alphabetPanel.add(button);
button.addActionListener(
new ActionListener () {
public void actionPerformed(ActionEvent e) {
letterGuessed( c );
alphabetPanel.remove(button);
}
});
// set the name of the button
button.setName(c + "");
}
이제 익명이 있습니다 keyListener
클래스는 키보드에 어떤 문자를 누르는지에 따라 버튼을 비활성화하고 싶은 클래스입니다. 따라서 사용자가 A를 누르면 ㅏ 버튼이 비활성화되었습니다. 내 현재 구현을 감안할 때 이것이 가능합니까?
해결책
클래스 레벨에서 26 개의 JBUTTON 객체 배열을 단순히 선언하여 두 청취자 모두 액세스 할 수 있습니까? 익명의 내부 클래스는 최종 변수뿐만 아니라 클래스 변수에 액세스 할 수 있다고 생각합니다.
다른 팁
버튼을 비활성화하고 싶은지 아니면 제거하고 싶습니까? 당신은 당신이 제거하는 것을 호출하고 당신의 대답에서 당신은 당신의 대답에서 당신은 비활성화에 대해 이야기하고 있습니다. 알파벳 패널에 키일 리스너를 추가하여이를 달성 할 수 있습니다. 그래서 당신은 for-loop를 시작하기 직전에 이것을 추가 할 수 있습니다.
InputMap iMap = alphabetPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap aMap = alphabetPanel.getActionMap();
그리고 actionlistener 대신 JButton에 추가하십시오.
iMap.put(KeyStroke.getKeyStroke(c), "remove"+c);
aMap.put("remove"+c, new AbstractAction(){
public void actionPerformed(ActionEvent e) {
// if you want to remove the button use the following two lines
alphabetPanel.remove(button);
alphabetPanel.revalidate();
// if you just want to disable the button use the following line
button.setEnabled(false);
}
});
또한 구성 요소를 통해 getText ()를 눌린 키와 비교할 수도 있습니다.
다른 사람이 언급했듯이 익명의 수업은 외부 클래스의 구성원과 지역 결승에 액세스 할 수 있습니다.
제휴하지 않습니다 StackOverflow