使用包装的JTextArea,JDialog的大小不正确

时间:2014-04-24 05:56:39

标签: jtextarea jdialog linewrap

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

但是,如果文本区域太大,则对话框的大小不能正确调整到JTextArea的高度。对话框在此示例中切断了“确定”按钮。

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

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?

这是一个截图:

1 个答案:

答案 0 :(得分:1)

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

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

对于我的测试代码,它完美地使对话框成为正确的大小

  1. 没有pack() With Pack Command
  2. 使用pack() With Pack Command