여러 프레임으로 작업 할 때 숨겨진 구성 요소가 제대로 처리되지 않는 문제가 있습니다.프레임이 보이지 않을 때 자바가 대화를 처리하지 않음
간단히 말해 부모가 숨겨진 프레임 인 모달 대화 상자를 처리 할 수 없습니다. 예를 들어
:
- 는 "전환 프레임 가시성"버튼을 클릭
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; public class MultipleFrameTest { public static void main(String[] args) { TestFrame test = new TestFrame(); FrameTester tester = new FrameTester(test); tester.setVisible(true); } private static class TestFrame extends JFrame { JDialog dialog; java.util.Timer timer; public TestFrame() { super("Test Frame"); this.dialog = null; this.timer = new java.util.Timer("Frame Timer"); fillFrame(); pack(); } private void fillFrame() { JButton dialogButton = new JButton("Launch Model Dialog"); dialogButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { JOptionPane pane = new JOptionPane("Wait for 2 seconds", JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION); dialog = pane.createDialog(TestFrame.this, "Question"); timer.schedule(new TimerTask() { public void run() { SwingUtilities.invokeLater(new Runnable() { public void run() { TestFrame.this.setVisible(false); if (dialog != null) { dialog.setVisible(false); dialog.dispose(); dialog = null; } } }); } }, 2 * 1000); dialog.setVisible(true); } }); JPanel panel = new JPanel(); panel.add(dialogButton); add(panel); } } private static class FrameTester extends JFrame { JFrame frame; public FrameTester(JFrame frame) { super("Frame Tester"); this.frame = frame; fillFrame(); pack(); } private void fillFrame() { JButton toggleButton = new JButton("Toggle Frame Visibility"); toggleButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { frame.setVisible(!frame.isVisible()); } }); JPanel panel = new JPanel(); panel.add(toggleButton); add(panel); } } }
이 예제를 실행하려면. 그러면
TestFrame
이 표시됩니다. - "모달 대화 상자 시작"버튼을 클릭하십시오. 그러면
JOptionPane
이 표시됩니다. TimerTask
이TestFrame
및dispose()
JOptionPane
을 숨길 때까지 2 초 정도 기다리십시오.- "Toggle Frame Visibility Button"을 클릭하십시오.
TestFrame
이 표시되고JOptionPane
이 첨부됩니다.
나는 내가 TestFrame
를 숨기기 전에 JOptionPane
를 배치함으로써이 문제를 해결할 수 있다는 사실을 알고 : 왜 이런 일
- TestFrame.this.setVisible(false);
if (dialog != null) {
dialog.setVisible(false);
dialog.dispose();
dialog = null;
}
+ TestFrame.this.setVisible(false);
는 사람은 알고 있나요? 버려지고있는 동안 숨겨진 경우에도 모달 대화 상자가 사라질 것으로 예상됩니다.
[* 여러 JFrames 사용, 좋음/나쁨 연습 * *] (http://stackoverflow.com/q/9554636/230513)도 참조하십시오. – trashgod