java - 显示 jdialog 后 JTextArea 不更新

标签 java swing modal-dialog jtextarea jdialog

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

最佳答案

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);
            }
        });
    }
}

关于java - 显示 jdialog 后 JTextArea 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12835730/

相关文章:

java - 如何从具有 GridBagLayout 布局的 JPanel 中获取位于特定 gridx、gridy 中的组件?

Java 更改内容 Pane

python - 在 Bootstrap 模式下在 flask 中闪烁消息

javascript - Rails 页面加载模态背景两次?

java - Java 8 Swing中的 Accordion 小部件

twitter-bootstrap - 如何避免在 Bootstrap 中关闭模式

java - 获取 openCv 错误 - EigenFaces.Predict() 方法中的图像步骤错误

java - 调用 web 服务时出现 FileNotFoundException

java - On Click 方法不适用于通过膨胀布局获得的按钮!

Java:将十进制数转换为字符串