使用自定义Swing组件进行文本换行的JOptionPane

时间:2016-04-21 03:32:52

标签: java swing joptionpane

我使用JOptionPane编写了许多项目,几乎每次因为我无法在其中包装文本而感到沮丧。

我知道JOptionPane支持HTML,但似乎总是没有做我想要的。首先,JOptionPane并不完全支持HTML - 例如,max-width属性非常棒。另一方面,<br /><p>标签都没有提供我真正追求的功能 - 一个在消息很小时很小的JOptionPane,当消息较大但是没有得到时,它会增长太大了,最终打破了新的界限。

这让我想到了我的问题。有没有办法编写我自己的自定义组件,可能继承自JFrame或类似的东西,这将允许我模拟JOptionPane的效果,但提供更细粒度的控制文字显示?这应该至少包括控制最大宽度和包装文本的功能。

我没有通过搜索其他问题找到答案(也许答案被所有答案都淹没了“使用HTML”)。这不是这些问题的重复。

2 个答案:

答案 0 :(得分:4)

Exmaple

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(文本)创建换行符。希望这会有所帮助,祝你有个美好的夜晚。 :)