2012-10-11 93 views
0

我试图更新显示JDialog后的jtextarea,但它不更新任何人都可以帮助我。显示jdialog后JTextArea不更新

public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setBounds(0, 0, 500, 500); 
     frame.setVisible(true); 
     JDialog dialog = new JDialog(frame); 
     dialog.setModal(true); 
     JPanel panel = new JPanel(); 
     dialog.add(panel); 
     final JTextArea area = new JTextArea(); 
     panel.add(area); 
     dialog.setBounds(100, 100, 200, 200); 
     area.setLineWrap(true); 
     area.setText("bbbbbbbbbbbb"); 
     dialog.setVisible(true); 
     area.setText("zzzz"); 
    } 

回答

4

dialog.setVisible的呼叫被阻止。这意味着area.setText("zzzz")语句将在关闭对话框之后才会执行。

这是一个简单的模式对话框

UPDATE

为了能够更新这样的UI的性质,你需要一点点偷偷摸摸...

public class TestDialog { 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException ex) { 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame(); 
       frame.setBounds(0, 0, 500, 500); 
       frame.setVisible(true); 

       JDialog dialog = new JDialog(frame); 
       dialog.setModal(true); 
       JPanel panel = new JPanel(); 
       dialog.add(panel); 
       final JTextArea area = new JTextArea(); 
       panel.add(area); 
       dialog.setBounds(100, 100, 200, 200); 
       area.setLineWrap(true); 
       area.setText("bbbbbbbbbbbb"); 

       new Thread(new Runnable() { 
        @Override 
        public void run() { 
         SwingUtilities.invokeLater(new Runnable() { 

          @Override 
          public void run() { 
           System.out.println("Hello"); 
           area.setText("zzzz"); 
          } 
         }); 
        } 
       }).start(); 

       dialog.setVisible(true); 
      } 
     }); 
    } 
} 
4

这是模态。将模态设置为false或在对话框中的某处添加area.setText()。例如。通过在可见的对话框上添加一个监听器。

+0

所以你可以帮我我想更新我的对话框,但它应该是模态意味着父母应该阻止。 –

+0

@BharatSharma我用一个小例子更新了我的文章,希望它有帮助;) – MadProgrammer