在制作程序时,我注意到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?
这是一个截图:
答案 0 :(得分:1)
如果在对话框(Window类中的函数)上运行pack
命令,它将根据子组件调整大小。对于您的情况,您将不必使用showMessageDialog()
重写以使调整大小起作用(因此首先进行对话,添加文本,打包,然后显示)
Dialog b = new Dialog();
// add stuff
b.pack();
对于我的测试代码,它完美地使对话框成为正确的大小
pack()
pack()