Обтекание текстом в JOptionPane?
Я использую следующий код для отображения сообщения об ошибке в моем приложении swing
try {
...
} catch (Exception exp) {
JOptionPane.showMessageDialog(this, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
Ширина диалогового окна ошибки длится в зависимости от сообщения. Есть ли способ обернуть сообщение об ошибке?
Ответы
Ответ 1
A JOptionPane
будет использовать JLabel
для отображения текста по умолчанию. Метка будет форматировать HTML. Установите максимальную ширину в CSS.
JOptionPane.showMessageDialog(
this,
"<html><body><p style='width: 200px;'>"+exp.getMessage()+"</p></body></html>",
"Error",
JOptionPane.ERROR_MESSAGE);
В более общем плане см. Как использовать HTML в Swing Components, а также этот простой пример использования HTML в JLabel
.
![9tzxu.png]()
![9mfvE.png]()
Ответ 2
Добавьте свое сообщение в текстовый компонент, который может быть обернут, например 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);
}
}
}));