web-dev-qa-db-ja.com

JOptionPaneでテキストを折り返しますか?

次のコードを使用して、swingアプリケーションにエラーメッセージを表示しています

try {
    ...
} catch (Exception exp) {
    JOptionPane.showMessageDialog(this, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}

メッセージによっては、エラーダイアログの幅が長くなります。エラーメッセージを折り返す方法はありますか?

29
laksys

JOptionPaneはデフォルトでJLabelを使用してテキストを表示します。ラベルはHTMLをフォーマットします。 CSSで最大幅を設定します。

JOptionPane.showMessageDialog(
    this, 
    "<html><body><p style='width: 200px;'>"+exp.getMessage()+"</p></body></html>", 
    "Error", 
    JOptionPane.ERROR_MESSAGE);

より一般的には、 SwingコンポーネントでHTMLを使用する方法 、およびこの単純な JLabelでHTMLを使用する例 を参照してください。

53
Andrew Thompson

JEditorPaneなどの折り返し可能なテキストコンポーネントにメッセージを追加し、エディターペインをmessageとしてJOptionPaneに指定します。 エディターペインとテキストペインの使用方法 および 方法例として、ダイアログの作成

補遺:折り返しの代わりに、以下に示すように、スクロールペインでの行指向のアプローチを検討してください。

error image

f.add(new JButton(new AbstractAction("Oh noes!") {
    @Override
    public void actionPerformed(ActionEvent action) {
        try {
            throw new UnsupportedOperationException("Not supported yet.");
        } catch (Exception e) {
            StringBuilder sb = new StringBuilder("Error: ");
            sb.append(e.getMessage());
            sb.append("\n");
            for (StackTraceElement ste : e.getStackTrace()) {
                sb.append(ste.toString());
                sb.append("\n");
            }
            JTextArea jta = new JTextArea(sb.toString());
            JScrollPane jsp = new JScrollPane(jta){
                @Override
                public Dimension getPreferredSize() {
                    return new Dimension(480, 320);
                }
            };
            JOptionPane.showMessageDialog(
                null, jsp, "Error", JOptionPane.ERROR_MESSAGE);
        }
    }
}));
32
trashgod