【问题标题】:JDialog doesn't size correctly with wrapped JTextAreaJDialog 的大小与包装的 JTextArea 不正确
【发布时间】:2014-04-24 05:56:39
【问题描述】:

在编写程序时,我注意到JOptionPane.showMessageDialog() 调用存在错误。我使用一个按钮来创建一个 JTextArea,它会包装然后显示一个包含该文本区域的对话框。

但是,如果文本区域太大,对话框本身的大小将无法正确调整到 JTextArea 的高度。在本例中,对话框切断了 OK 按钮。

我在以下代码中复制了该错误:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;


public class DialogBug {

    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final String text = "looooooooooooooooooooooong text looooooooooooooooooooooooooooooooooooooong text";

        JButton button = new JButton();
        button.setPreferredSize(new Dimension(30, 30));

        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JTextArea area = new JTextArea(text, 0, 50);
                area.setEditable(false);
                area.setLineWrap(true);
                area.setWrapStyleWord(true);
                area.append(text);
                area.append(text);
                area.append(text);

                JOptionPane.showMessageDialog(frame, area, "why does it do this", JOptionPane.WARNING_MESSAGE);
            }
        });

        frame.add(button);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

我会发布一张图片,但我没有足够的声誉......

有没有办法在不使用 JScrollPane 的情况下解决这个问题?

截图如下:

【问题讨论】:

    标签: jtextarea jdialog word-wrap


    【解决方案1】:

    如果您在对话框上运行pack 命令(Window 类中的函数),它将根据子组件调整大小。对于您的情况,您必须在不使用 showMessageDialog() 的情况下进行重写以使调整大小起作用(因此首先制作对话框,添加文本,打包,然后显示)

    Dialog b = new Dialog();
    // add stuff
    b.pack();
    

    对于我的测试代码,它完美地使对话框的大小合适

    1. 没有pack()
    2. pack()

    【讨论】:

    • 有效!我仍然不明白为什么 showMessageDialog() 不会自动 pack() 。制作自己的 JDialog 并自己添加 OK 和 Cancel 按钮肯定会更乏味,因为 showMessageDialog() 会为您完成所有这些,但至少它有效。
    猜你喜欢
    • 2020-09-19
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多