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

Java 使用自定义Swing组件进行文本换行的JOptionPane,java,swing,joptionpane,Java,Swing,Joptionpane,我已经使用JOptionPanes编写了许多项目,几乎每次我都因为无法将文本包装在项目中而感到沮丧 我知道JOptionPane支持HTML,但这似乎总是达不到我想要的效果。首先,JOptionPane不完全支持HTML,例如,max width属性就非常棒了。另一方面,无论是还是标记都不能提供我真正想要的功能—一个JOptionPane,当消息很小时它很小,当消息较大时它会变大,但不会变大,最终会换行 这就引出了我的问题。有没有什么方法可以编写自己的自定义组件,可以从JFrame或类似的东西继

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

我知道
JOptionPane
支持HTML,但这似乎总是达不到我想要的效果。首先,
JOptionPane
不完全支持HTML,例如,
max width
属性就非常棒了。另一方面,无论是

还是
标记都不能提供我真正想要的功能—一个JOptionPane,当消息很小时它很小,当消息较大时它会变大,但不会变大,最终会换行

这就引出了我的问题。有没有什么方法可以编写自己的自定义组件,可以从
JFrame
或类似的东西继承,这样我就可以模拟
JOptionPane
的效果,但可以对显示的文本进行更精细的控制?这至少应包括控制最大宽度和包装文本的功能


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

您是否在谈论一些事情,例如只添加换行符,使选项框不显示此长字符串?如果是:

JOptionPane.showMessageDialog(null),此
“\n消息
“\nhas
“\n换行符。”)


应该足够了。使用\n(文本)创建换行符。希望这有帮助,祝您晚安。:)

您是否正在讨论添加换行符这样选项框就不会显示这么长的文本字符串?如果是这样:

JOptionPane.showMessageDialog(null),此
“\n消息
“\nhas
“\n换行符。”)

应该足够了。使用\n(文本)创建换行符。希望这会有所帮助,祝你晚安。:)

显然,这只是一个非常简单的示例,您将不得不花一些时间思考如何最好地将此概念应用到您自己的API中,以便它满足您的需求并为您提供最大的灵活性

您可以使用
JEditorPane
来代替它,让纯文本和HTML都可以使用,这需要付出更多的努力

显然,这只是一个非常简单的示例,您将不得不花一些时间思考如何最好地将此概念应用到您自己的API中,以便它满足您的需求并为您提供最大的灵活性


您可以使用
JEditorPane
来代替,让纯文本和HTML都可以使用,这需要付出更多的努力

谢谢您的回答,但这并不能解决我的问题。我想要一个可重用且健壮的组件,并且可以处理我传递给它的任何类型的输入。我希望能够通过它“嗨”或整个段落,并让它仍然显示干净。我不想通过设置一系列换行符来手动格式化我传递的每个文本。事实上,问题的关键是避免这样做。应该有一个组件为我们做这件事。@nhouser9如果每次我听到有人这么说我都有一美元的话。SwingAPI非常灵活,您会惊讶于只需一点点努力就能产生什么效果。例如,您是否知道
作业窗格
消息
参数是一个
对象
,如果您将它传递给一个基于
组件的对象,它将被简单地“添加”到
作业窗格
。想一想,想一想答案,但这并不能解决我的问题。我想要一个可重用且健壮的组件,并且可以处理我传递给它的任何类型的输入。我希望能够通过它“嗨”或整个段落,并让它仍然显示干净。我不想通过设置一系列换行符来手动格式化我传递的每个文本。事实上,问题的关键是避免这样做。应该有一个组件为我们做这件事。@nhouser9如果每次我听到有人这么说我都有一美元的话。SwingAPI非常灵活,您会惊讶于只需一点点努力就能产生什么效果。例如,您是否知道
作业窗格
消息
参数是一个
对象
,如果您将它传递给一个基于
组件的对象,它将被简单地“添加”到
作业窗格
。想一想
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);
    }

}