JOptionPaneのカスタマイズ
Swingのダイアログを表示するための「JOptionPane」は、独自のパネルを設定可能。
引数の「message」は、実はStringではなく、Object型なのでSwingのコンポーネントが設定可能。
【参考】
http://www.ne.jp/asahi/hishidama/home/tech/java/swing/JOptionPane.html
例として、エラーダイアログを表示する。その際に例外結果をTextAreaとして表示する。
- JLabelで改行をするには、HTML形式にする必要がある。
- HTML形式にするためにエスケープが必要なので、Commons Langの「StringEscapeUtils.escapeHtml」を使用している。
import java.awt.Component; import javax.swing.BoxLayout; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import org.apache.commons.lang.StringEscapeUtils; public void showCustomDialog() { final JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); // メッセージの組み立て // 改行する場合はHTML形式にする String message = "あああああああああああああああああ\nああああああああああ\r\nあああ\rああああああ。"; message = StringEscapeUtils.escapeHtml(message) .replaceAll("\r\n", "<br />") .replaceAll("\n", "<br />") .replaceAll("\r", "<br />"); final JLabel messageLabel = new JLabel("<html>".concat(message)); messageLabel.setAlignmentY(Component.TOP_ALIGNMENT); messageLabel.setAlignmentX(Component.CENTER_ALIGNMENT); panel.add(messageLabel); // 詳細内容をTextAreaで表示する // スクロール付きにする final JTextArea detailTextArea = new JTextArea("いいいいいいい\nいい\nい\nい\nい\nい\nい\nい\nい\nい\nい\nいいいいいいいいいいい", 5, 10); detailTextArea.setAlignmentY(Component.BOTTOM_ALIGNMENT); detailTextArea.setAlignmentX(Component.CENTER_ALIGNMENT); detailTextArea.setEditable(false); detailTextArea.setLineWrap(true); JScrollPane scrollPane = new JScrollPane(); scrollPane.setViewportView(detailTextArea); panel.add(scrollPane); // ★通常ならばメッセージを設定する第2引数にPanelを設定する JOptionPane.showMessageDialog(null, panel, "タイトル", JOptionPane.ERROR_MESSAGE); }