Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用HTML内容类型在JTextPane上设置固定宽度但动态高度?_Java_Swing_Jeditorpane - Fatal编程技术网

Java 如何使用HTML内容类型在JTextPane上设置固定宽度但动态高度?

Java 如何使用HTML内容类型在JTextPane上设置固定宽度但动态高度?,java,swing,jeditorpane,Java,Swing,Jeditorpane,我有一个JEditorPane。我希望窗格高度与内容相对应。我已经这样做了,当窗格内容为文本时,它会起作用: public class JEditorPaneTest extends JFrame { public static void main(String[] args) { final JFrame mainFrame = new JFrame("test"); mainFrame.getContentPane().s

我有一个
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>";
    }
}
公共类JEditorPaneTest扩展JFrame{
公共静态void main(字符串[]args){
最终JFrame大型机=新JFrame(“测试”);
mainFrame.getContentPane().setLayout(新的FlowLayout());
大型机。设置大小(500500);
最终绝地窗格字段=新绝地窗格();
//field.setContentType(“text/html”);
field.setText(htmlize("同一天,我的朋友们都坐在我的位子上,奉献给我的精英们。自由的大前庭,我的发廊。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言猫咪调味品,viverra felis nulla,justo,Duis ut dui velit,Integer vitae mollis leo,Cras quis urna odio,Suspendisse tempus,urna sed maximus flingilla,ante velit finibus masa,id commodo libero quam non ipsum.sed id auge vitae vitae sapien sagittis imperdiet in eget nibh.Nam semper posuer nisl,dictum efficitificitum in ipsum aliquet ac.Phasellus eros massa,fringilla et neque maximus,pretium tempor magna。”);
字段设置大小(200,40);
field.setSize(200,field.getPreferredSize().height);
mainFrame.getContentPane().add(字段,BorderLayout.CENTER);
mainFrame.setVisible(true);
System.out.println(field.getPreferredSize().width+,“+field.getPreferredSize().height);
}
公共静态字符串htmlize(字符串pMessage){
返回“+pMessage+”;
}
}
首选大小根据文本内容而定。宽度固定为200,因此通过swing可以轻松计算首选高度。在控制台中,我可以看到200、411(宽度固定为首选高度)。在对话框中,我们看到窗格具有良好的大小:

问题是我想要一个HTML内容。因此在代码中,我取消了对
字段.setContentType(“text/HTML”);

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

此处显示对话框结果:


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

我想你应该再读一遍

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

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

导入java.awt.BorderLayout;
导入java.awt.Dimension;
导入javax.swing.JEditorPane;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共类JEditorPaneTest扩展JFrame{
公共静态void main(字符串[]args){
最终JFrame大型机=新JFrame(“测试”);
大型机。设置大小(500500);
最终绝地窗格字段=新绝地窗格();
JPanel面板=新的JPanel();
field.setContentType(“text/html”);
field.setText(htmlize(“同一天,我的朋友们都坐在我的位子上,奉献给我的精英们。自由的大前庭,我的发廊。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言。我的名言猫咪调味品,viverra felis nulla,justo,Duis ut dui velit,Integer vitae mollis leo,Cras quis urna odio,Suspendisse tempus,urna sed maximus flingilla,ante velit finibus masa,id commodo libero quam non ipsum.sed id auge vitae vitae sapien sagittis imperdiet in eget nibh.Nam semper posuer nisl,dictum efficitificitum in ipsum aliquet ac.Phasellus eros massa,fringilla et neque maximus,pretium tempor magna。”);
字段设置大小(200,40);
field.setPreferredSize(新维度(200,field.getPreferredSize().height));
面板。添加(字段);
mainFrame.getContentPane().add(面板,BorderLayout.CENTER);
mainFrame.setVisible(true);
System.out.println(field.getPreferredSize().width+,“+field.getPreferredSize().height);
}
公共静态字符串htmlize(字符串pMessage){
返回“+pMessage+”;
}
}
这就是它的样子


我想你应该再读一读

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

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

导入java.awt.BorderLayout;
导入java.awt.Dimension;
导入javax.swing.JEditorPane;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共类JEditorPaneTest扩展JFrame{
公共静态void main(字符串[]args){
最终JFrame大型机=新JFrame(“测试”);
大型机。设置大小(500500);
最终绝地窗格字段=新绝地窗格();
JPanel面板=新的JPanel();
field.setContentType(“text/html”);
菲尔德