다른 익명의 클래스의 익명 수업에서 "이름없는"Jbutton에 액세스 하시나요?

StackOverflow https://stackoverflow.com/questions/286651

문제

나는 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 ()를 눌린 키와 비교할 수도 있습니다.

다른 사람이 언급했듯이 익명의 수업은 외부 클래스의 구성원과 지역 결승에 액세스 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top