我正在使用以下代码在我的 Swing 应用程序中显示错误消息
try {
...
} catch (Exception exp) {
JOptionPane.showMessageDialog(this, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
错误对话框的宽度会变长,具体取决于消息。有没有办法包装错误信息?
我正在使用以下代码在我的 Swing 应用程序中显示错误消息
try {
...
} catch (Exception exp) {
JOptionPane.showMessageDialog(this, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
错误对话框的宽度会变长,具体取决于消息。有没有办法包装错误信息?
A默认JOptionPane
使用 aJLabel
来显示文本。标签将格式化 HTML。在 CSS 中设置最大宽度。
JOptionPane.showMessageDialog(
this,
"<html><body><p style='width: 200px;'>"+exp.getMessage()+"</p></body></html>",
"Error",
JOptionPane.ERROR_MESSAGE);
更一般地,请参阅如何在 Swing 组件中使用 HTML,以及在JLabel
.
将您的消息添加到可以换行的文本组件中,例如JEditorPane
,然后将编辑器窗格指定message
为您的JOptionPane
. 有关示例,请参阅如何使用编辑器窗格和文本窗格以及如何制作对话框。
附录:作为换行的替代方案,请考虑滚动窗格中的面向行的方法,如下所示。
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);
}
}
}));
捕获(异常 e){ e.printStackTrace();
StringBuilder sb = new StringBuilder(e.toString());
for (StackTraceElement ste : e.getStackTrace()) {
sb.append("\n\tat ");
sb.append(ste);
}
JTextArea jta = new JTextArea(sb.toString());
JScrollPane jsp = new JScrollPane(jta) {
@Override
public Dimension getPreferredSize() {
return new Dimension(750, 320);
}
};
JOptionPane.showMessageDialog(
null, jsp, "Error", JOptionPane.ERROR_MESSAGE);
break; /// to show just one time
}