【问题标题】:JTextArea not updating after display jdialog显示 jdialog 后 JTextArea 不更新
【发布时间】:2012-10-11 08:51:45
【问题描述】:

我正在尝试在显示 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");
    }

【问题讨论】:

    标签: java swing modal-dialog jtextarea jdialog


    【解决方案1】:

    dialog.setVisible 的调用被阻塞。这意味着语句area.setText("zzzz") 直到对话框关闭后才会执行。

    这就是模态对话框的本质

    更新

    为了能够像这样更新 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);
                }
            });
        }
    }
    

    【讨论】:

      【解决方案2】:

      它是模态的。将 modal 设置为 false 或在对话框中的某处添加 area.setText() 调用。例如。通过在可见的对话框上添加侦听器。

      【讨论】:

      • 所以你能帮我更新我的对话框,但它应该是模态的,意味着父级应该被阻止。
      • @BharatSharma 我用一个小例子更新了我的帖子,希望对您有所帮助;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多