我使用JOptionPane
编写了许多项目,几乎每次因为我无法在其中包装文本而感到沮丧。
我知道JOptionPane
支持HTML,但似乎总是没有做我想要的。首先,JOptionPane
并不完全支持HTML - 例如,max-width
属性非常棒。另一方面,<br />
和<p>
标签都没有提供我真正追求的功能 - 一个在消息很小时很小的JOptionPane,当消息较大但是没有得到时,它会增长太大了,最终打破了新的界限。
这让我想到了我的问题。有没有办法编写我自己的自定义组件,可能继承自JFrame
或类似的东西,这将允许我模拟JOptionPane
的效果,但提供更细粒度的控制文字显示?这应该至少包括控制最大宽度和包装文本的功能。
我没有通过搜索其他问题找到答案(也许答案被所有答案都淹没了“使用HTML”)。这不是这些问题的重复。
答案 0 :(得分:4)
import java.awt.Component;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
public class OptionPaneUtilities {
public static void main(String[] args) {
OptionPaneUtilities.showMessage(null, "I sometimes I think we forget just how flexible the JOptionPane API is and what it can do. A little effort could go a long way");
}
public static void showMessage(Component comp, String message) {
JTextArea ta = new JTextArea(message, 1, 20);
ta.setWrapStyleWord(true);
ta.setLineWrap(true);
ta.setOpaque(false);
ta.setBorder(null);
ta.setEditable(false);
ta.setFocusable(false);
JOptionPane.showMessageDialog(comp, ta);
}
}
现在,显然,这只是一个非常简单的示例,您将不得不花一些时间考虑如何最好地将此概念应用于您自己的API,以便它满足您的需求并为您提供最好的灵活性。
您可以使用JEditorPane
代替纯文本和HTML,以便更加努力地工作
答案 1 :(得分:0)
您是在谈论诸如添加换行符之类的内容,以便选项框不显示这长串文本?如果是这样的话:
JOptionPane.showMessageDialog(null, "This
"\nmessage
"\nhas
"\nlinebreaks.")
应该足够了。使用\ n(文本)创建换行符。希望这会有所帮助,祝你有个美好的夜晚。 :)