JDialog не правильно размер с обернутой JTextArea
При создании программы я заметил ошибку с вызовом 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 ответ
Если вы запустите pack
Команда в диалоговом окне (функция в классе Window) изменяет размер в зависимости от подкомпонентов. Для вашего случая вам придется переписать без использования showMessageDialog()
чтобы заставить работать изменение размера (поэтому сначала сделайте диалог, добавьте текст, упакуйте, затем покажите его)
Dialog b = new Dialog();
// add stuff
b.pack();
Для моего тестового кода это отлично работало, чтобы диалоговые окна были правильных размеров
- Без
pack()
- С
pack()