문제

스윙 애플리케이션을 만들었고 GUI에 "시작"버튼이 있습니다. "시작"버튼을 클릭 할 때마다 시작 버튼을 비활성화하고 "정지"버튼을 활성화해야합니다.

이를 위해 "ActionPeformed (...)" "시작"버튼의 다음 코드를 작성했습니다.

startButton.setEnabled(false);
stopButton.setEnabled(true);

그러나 위의 코드는 GUI에 원하는 영향을 미치지 않습니다.

위의 코드가 내가하고 싶은 일에 맞습니까?

"Repaint ()"도 작동하지 않습니다.

편집하다:

코드가 매우 길어 모든 코드를 붙여 넣을 수는 없습니다. 그러나 코드에 대해 더 많이 알 수 있습니다.

"START"버튼의 "ActionPeformed"메소드에서 위의 두 문장을 호출 한 후 "SwingWorker"스레드를 실행하고 있습니다.

이 스레드가 문제를 일으키고 있습니까?

도움이 되었습니까?

해결책

이를 위해 "ActionPeformed (...)" "시작"버튼의 다음 코드를 작성했습니다.

해당 코드가 필요합니다 actionPerformed(...)ActionListener 시작 버튼 자체가 아닌 시작 버튼에 등록됩니다.

간단한 것을 추가 할 수 있습니다 ActionListener 이와 같이:

JButton startButton = new JButton("Start");
startButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ae) {
        startButton.setEnabled(false);
        stopButton.setEnabled(true);
     }
   }
 );

위의 시작 부분은 위에 있어야합니다 final 위의 예에서 로컬 범위에서 익명 리스너를 만들려면.

다른 팁

코드가 매우 길어 모든 코드를 붙여 넣을 수는 없습니다.

코드가 작동하지 않는 데는 여러 가지 이유가있을 수 있습니다. 어쩌면 버튼 변수를 두 번 선언 했으므로 실제로 자신이 생각하는 것처럼 버튼을 활성화/비활성화하는 것이 실제로 변경되지 않습니다. 어쩌면 당신은 EDT를 차단하고있을 것입니다.

당신은 만들어야합니다 SSCCE 포럼에 게시합니다.

따라서 문제를 분리하는 것은 당신에게 달려 있습니다. 간단한 프레임으로 시작하여 두 개의 버튼을 시작하고 코드가 작동하는지 확인하십시오. 일단 작동하면 10 초 동안 단순히 잠을자는 스레드를 시작하여 여전히 작동하는지 확인하십시오.

200 라인 프로그램을 작성하기 전에 Basice가 어떻게 작동하는지 알아보십시오.

기본 디버깅을하는 방법을 배우십시오. 우리는 독자가 아닙니다. 우리는 문제에 대한 언어 적 설명을 바탕으로 당신이 무엇을하고 있는지 추측 할 수 없습니다.

이것은 작동합니다.

public class TestButton {

public TestButton() {
    JFrame f = new JFrame();
    f.setSize(new Dimension(200,200));
    JPanel p = new JPanel();
    p.setLayout(new FlowLayout());

    final JButton stop = new JButton("Stop");
    final JButton start = new JButton("Start");
    p.add(start);
    p.add(stop);
    f.getContentPane().add(p);
    stop.setEnabled(false);
    stop.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            start.setEnabled(true);
            stop.setEnabled(false);

        }
    });

    start.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            start.setEnabled(false);
            stop.setEnabled(true);

        }
    });
    f.setVisible(true);
}

/**
 * @param args
 */
public static void main(String[] args) {
    new TestButton();

}

}

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