Java에서 javax.swing.jbutton을 비활성화하는 방법?
-
06-07-2019 - |
문제
스윙 애플리케이션을 만들었고 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();
}
}