2014-07-22 2 views
0

인터넷에서 재생할 수있는 자바 게임을 작성 중입니다. 스트림을 사용하여 데이터를 보내고받습니다.특정 조건까지 발생하는 팝업 메시지

내 질문은 : 사용자에게 그가 기다려야한다는 것을 알려주는 팝업을 표시하는 방법.

내가 쓴이 :

while(!in.ready()) 
    JOptionPane.showMessageDialog(this, "Not your turn"); 

이 작동하고 또한 버튼을 타격에서 사용자를 방지 할뿐만 아니라 지속적으로 "확인"버튼을 눌렀을 강제로. 그래서 "in"스트림이 준비 될 때까지 닫을 수없는 팝업이 있습니까? 아니면 다른 옵션이 작동합니까?

답변

0

나만의 것을 만들어야합니다. 예 :

class CustomBlockerDialog extends JDialog { 
    public CustomBlockerDialog(Frame owner, String text) { 
     super(owner, true); 
     setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); 
     setSize(300, 100); // Adjust if needed 
     setTitle(""); 
     add(new JLabel(text, SwingConstants.CENTER)); 
    } 
} 

그리고 (기본 창에서)/숨기기를 보여 :

CustomBlockerDialog block = new CustomBlockerDialog(this, "Not your turn"); // Creation, once 

block.setVisible(true); // Show 

block.setVisible(false); // Hide 

그냥 다른 스레드에서 SwingUtilities.invokeLater로 전화를 기억한다.

0

당신은 대화 그것을 열 사용자 정의를 작성하고 스트림을 준비 할 때 닫아야 :

final JDialog dialog = new JDialog(); 

    dialog.setPreferredSize(new Dimension(300, 90)); 
    dialog.add(new JLabel("  Please Wait...")); 
    dialog.setUndecorated(true); // hide close button 
    dialog.pack(); 
    dialog.setLocation(400, 400); // or next line 
    //dialog.setLocationRelativeTo(this); 
    dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
    dialog.setVisible(true); 


    while(!in.ready()){ /* wait...*/ }; 


    SwingUtilities.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      dialog.setVisible(false); 
      dialog.dispose(); 
     } 
    });