在 JOptionPane 中文本换行?

2022-09-01 08:03:26

我正在使用以下代码在我的 Swing 应用程序中显示错误消息

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

错误对话框的宽度会变长,具体取决于消息。有没有办法包装错误消息?


答案 1

默认情况下,A 将使用 a 来显示文本。标签将设置 HTML 格式。在 CSS 中设置最大宽度。JOptionPaneJLabel

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

更一般地说,请参阅如何在 Swing 组件中使用 HTML,以及在 JLabel 中使用 HTML 的简单示例


答案 2

将消息添加到可以换行的文本组件(如 ),然后将编辑器窗格指定为 .有关示例,请参阅如何使用编辑器窗格和文本窗格如何创建对话框JEditorPanemessageJOptionPane

附录:作为换行的替代方法,请考虑在滚动窗格中采用面向线条的方法,如下所示。

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);
        }
    }
}));