JTextPane - 适合其内容的大小

JTextPane - fit size to its content

我有什么 -

我需要什么 -

代码:

JFrame frame = new JFrame();
JPanel panel = new JPanel();
JTextPane pane = new JTextPane();
pane.setText("Long string Long string Long string Long string Long string Long string");
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
panel.add(pane);
panel.add(new JButton("Button"));
frame.add(panel);
frame.show();

如果我这样做 frame.pack(),我会变得很长 window 没有自动换行!

对于任何 HTML 感知的 Swing 组件,可以使用 HTML 样式 (CSS) 为 body 设置宽度。这反过来将确定要呈现的行数,并由此确定文本组件的首选高度。在 CSS 中设置宽度可以避免计算组件中应该出现换行符的位置(或组件的最佳尺寸)。

更一般地说,请参阅 How to Use HTML in Swing Components

例如

import javax.swing.*;

public class FixedWidthLabel {

    public static void main(String[] srgs) {
        final String s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eu nulla urna. Donec sit amet risus nisl, a porta enim. Quisque luctus, ligula eu scelerisque gravida, tellus quam vestibulum urna, ut aliquet sapien purus sed erat. Pellentesque consequat vehicula magna, eu aliquam magna interdum porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sollicitudin sapien non leo tempus lobortis. Morbi semper auctor ipsum, a semper quam elementum a. Aliquam eget sem metus.";
        final String html1 = "<html><body style='width: ";
        final String html2 = "px'>";

        Runnable r = new Runnable() {

            @Override
            public void run() {
                JOptionPane.showMessageDialog(
                        null, new JLabel(html1 + "200" + html2 + s));
                JOptionPane.showMessageDialog(
                        null, new JLabel(html1 + "300" + html2 + s));
            }
        };
        SwingUtilities.invokeLater(r);
    }
}