JOptionPane 中的文本换行?
Posted
技术标签:
【中文标题】JOptionPane 中的文本换行?【英文标题】:Text wrap in JOptionPane? 【发布时间】:2012-12-10 07:03:37 【问题描述】:我正在使用以下代码在我的 Swing 应用程序中显示错误消息
try
...
catch (Exception exp)
JOptionPane.showMessageDialog(this, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
错误对话框的宽度会变长,具体取决于消息。有什么方法可以包装错误信息吗?
【问题讨论】:
【参考方案1】:将您的消息添加到可以换行的文本组件中,例如JEditorPane
,然后将编辑器窗格指定为message
到您的JOptionPane
。有关示例,请参见 How to Use Editor Panes and Text Panes 和 How to Make Dialogs。
附录:作为换行的替代方法,请考虑在滚动窗格中使用面向行的方法,如下所示。
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);
));
【讨论】:
使用它来编写更少的代码来将堆栈跟踪放入字符串:***.com/a/4812589 在错误消息比预期长的情况下,您的更合适。【参考方案2】:默认情况下,JOptionPane
将使用JLabel
来显示文本。标签将格式化 html。在 CSS 中设置最大宽度。
JOptionPane.showMessageDialog(
this,
"<html><body><p style='width: 200px;'>"+exp.getMessage()+"</p></body></html>",
"Error",
JOptionPane.ERROR_MESSAGE);
更一般地,请参阅How to Use HTML in Swing Components,以及这个简单的example of using HTML in JLabel
。
【讨论】:
@laksys:没错,String
会自动包装在支持 HTMl 的 JLabel
中。
不要忘记对字符串进行 html 转义,否则某些特殊字符可能不起作用。
为了记录,没有必要关闭标签,甚至打开正文。只要有<html>
标签,Java 就可以很好地解析 HTML。
@Lee 你为什么建议任何人不要关闭标签?
对于<html>
标签,不需要关闭它(其他可能)。它只是更快、更容易并且可能更具可读性。【参考方案3】:
捕获(异常 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
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于JOptionPane 中的文本换行?的主要内容,如果未能解决你的问题,请参考以下文章