Многострочное сообщение в JOptionPane

При разработке графического интерфейса на Swing, порой, возникает необходимость выводить небольшие сообщения для пользователя. Для этого уже существует встроенная возможность в виде класса JOptionPane, который содержит массу всевозможных статических методов на все случаи жизни. Он используется, как правило, для коротких сообщений или вопросов в одну строку.

Например:

Короткое сообщение

JOptionPane.showConfirmDialog(MainFrame.this, "Вы уверены, что хотите выйти?", "Выход", JOptionPane.YES_NO_OPTION);

Но что если необходимо вывести несколько строк так, чтобы их было удобно читать. Использовать символ перевода строки (\n) не помогает и мы получим нечто вроде:

Очень длинное сообщение

Поскольку программист существо в большой своей массе ленивое, то очень не хочется писать свой диалог для вывода таких сообщение в несколько строк. Выход есть — всего лишь небольшой трюк

List<String> lines = Files.readAllLines(new File("rules.txt").toPath(), Charset.forName("utf8"));
JOptionPane.showMessageDialog(MainFrame.this, lines.toArray(), "Правила", JOptionPane.INFORMATION_MESSAGE);

Идея в том, чтобы представить вместо одного объекта — массив, тогда этот конструктор диалогов все правильно обработает. Это простой и в то же время быстрый способ.

Многострочное сообщение

 

Конечно же это не единственный способ. Поскольку сигнатура метода позволяет в качестве сообщения принимать объект любого типа, то можно в качестве «тела» диалога передать JPanel, которая будет содержать данные в подходящей верстке.

JPanel panel = new JPanel(new GridLayout(0, 1, 5, 5));
JLabel title = new JLabel(TIC_TAC_TOE);
JLabel description = new JLabel("Описание: популярная игра :)");
JLabel version = new JLabel("Версия: " + VERSION);
panel.add(title);
panel.add(description);
panel.add(version);
JOptionPane.showMessageDialog(MainFrame.this, panel, "Об игре", JOptionPane.INFORMATION_MESSAGE);

Панель в качестве сообщения

 


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>