【问题标题】:How to set fixed width but dynamic height on JTextPane with HTML content type?如何在具有 HTML 内容类型的 JTextPane 上设置固定宽度但动态高度?
【发布时间】:2021-02-27 14:03:28
【问题描述】:

我有一个JEditorPane。我希望窗格高度与内容相对应。我已经这样做了,当窗格内容为文本时它可以工作:

public class JEditorPaneTest extends JFrame {
    
    public static void main(String[] args) {
        final JFrame mainFrame = new JFrame("test");
        mainFrame.getContentPane().setLayout(new FlowLayout());
        mainFrame.setSize(500,500);
            
        final JEditorPane field = new JEditorPane();
        //field.setContentType("text/html");
        field.setText(htmlize("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse accumsan magna vel libero bibendum, quis hendrerit nisi rutrum. Cras placerat erat eget dictum ornare. Sed eget nisl quis nibh vehicula mollis. Vestibulum non iaculis erat, quis pulvinar magna. Suspendisse ac rhoncus purus. Quisque finibus, dolor varius tincidunt aliquet, mauris felis condimentum neque, at viverra felis nulla at justo. Duis ut dui velit. Integer vitae mollis leo. Cras quis urna odio. Suspendisse tempus, urna sed maximus fringilla, ante velit finibus massa, id commodo libero quam non ipsum. Sed id augue vitae sapien sagittis imperdiet in eget nibh. Nam semper posuere nisl, dictum efficitur ipsum aliquet ac. Phasellus eros massa, fringilla et neque maximus, pretium tempor magna."));
        
        field.setSize(200,40);
        field.setSize(200, field.getPreferredSize().height);
                
        mainFrame.getContentPane().add(field,BorderLayout.CENTER);
        mainFrame.setVisible(true);
        System.out.println(field.getPreferredSize().width+" , "+field.getPreferredSize().height);
    }
    
    public static String htmlize(String pMessage) {
        return "<html><body>" + pMessage + "</body></html>";
    }
}

首选大小根据文本内容已知。宽度固定为 200,因此可以通过摆动轻松计算首选高度。在控制台中,我可以看到 200、411(我固定首选高度的宽度)。在对话框中,我们看到窗格的大小合适:

问题是我想要一个 HTML 内容。所以在代码中我取​​消注释field.setContentType("text/html");

我运行我的程序,我在控制台中有:5393、23:宽度不再强制为 200。

这里是对话结果:

如何解决我的 HTML 内容问题?

【问题讨论】:

    标签: java swing jeditorpane


    【解决方案1】:

    我认为你应该再读一遍layout managers

    您将JFrame 的内容窗格的布局管理器设置为FlowLayout,然后使用BorderLayoutJEditorPane 添加到其中。我不知道那实际上是做什么的,但我认为这不是您想要的。

    FlowLayout 尊重它包含的组件的首选大小,因此我设置了JEditorPane首选 大小,然后我创建了一个JPanel 并将JEditorPane 添加到它然后将JPanel 添加到JFrame

    import java.awt.BorderLayout;
    import java.awt.Dimension;
    
    import javax.swing.JEditorPane;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class JEditorPaneTest extends JFrame {
        
        public static void main(String[] args) {
            final JFrame mainFrame = new JFrame("test");
            mainFrame.setSize(500,500);
                
            final JEditorPane field = new JEditorPane();
            JPanel panel = new JPanel();
            field.setContentType("text/html");
            field.setText(htmlize("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse accumsan magna vel libero bibendum, quis hendrerit nisi rutrum. Cras placerat erat eget dictum ornare. Sed eget nisl quis nibh vehicula mollis. Vestibulum non iaculis erat, quis pulvinar magna. Suspendisse ac rhoncus purus. Quisque finibus, dolor varius tincidunt aliquet, mauris felis condimentum neque, at viverra felis nulla at justo. Duis ut dui velit. Integer vitae mollis leo. Cras quis urna odio. Suspendisse tempus, urna sed maximus fringilla, ante velit finibus massa, id commodo libero quam non ipsum. Sed id augue vitae sapien sagittis imperdiet in eget nibh. Nam semper posuere nisl, dictum efficitur ipsum aliquet ac. Phasellus eros massa, fringilla et neque maximus, pretium tempor magna."));
            
            field.setSize(200,40);
            field.setPreferredSize(new Dimension(200, field.getPreferredSize().height));
            panel.add(field);
                    
            mainFrame.getContentPane().add(panel,BorderLayout.CENTER);
            mainFrame.setVisible(true);
            System.out.println(field.getPreferredSize().width+" , "+field.getPreferredSize().height);
        }
        
        public static String htmlize(String pMessage) {
            return "<html><body>" + pMessage + "</body></html>";
        }
    }
    

    这就是它的样子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多