如何将jtextpane的preferdsize设置为其内容大小?

时间:2014-07-22 16:40:12

标签: java swing jtextpane preferredsize

我有使用Boxlayout的Jpanel,一些JTextPane和JPanel将动态添加它。 我想设置JTextPanes的首选大小以适合其内容。 我将StyledDocument用于我的JTextPane。 我怎么能这样做?

编辑: 当我创建一个新的JTextPane时,我有它的内容,它不会改变。 这是我的代码:

public void display(final String text){
    StyleContext sc = new StyleContext();
    final DefaultStyledDocument doc = new DefaultStyledDocument(sc);
    Style defaultStyle = sc.getStyle(StyleContext.DEFAULT_STYLE);
    final Style style = sc.addStyle("MainStyle", defaultStyle);
    JTextPane pane = new JTextPane(){
        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        @Override
        public Dimension getMinimumSize(){
            return new Dimension(text.length()*5, getContentHeight(text.length()*5,text));
        }
        @Override 
        public Dimension  getMaximumSize(){
            return  new Dimension(430, getContentHeight(text.length()*5,text));
        }
    };
    receive.setStyledDocument(doc);
    receive.setEditable(false);
    receive.setPreferredSize(new Dimension(text.length()*5, getContentHeight(text.length()*5,text)));

    try {
        doc.insertString(doc.getLength(),text,style);
    } catch (BadLocationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    Jpanel.add(pane);

}

public int getContentHeight(int i, String content) {
        JEditorPane dummyEditorPane=new JEditorPane();
        dummyEditorPane.setSize(i,Short.MAX_VALUE);
        dummyEditorPane.setText(content);
        return dummyEditorPane.getPreferredSize().height;
    }

问题出在getMinimumSize()以及getMaximumSize()setPreferredSize()方法中! 也是我为dummyEditorPane.setSize(i,Short.MAX_VALUE);设置的宽度 那么如何设置textpane的修复大小?

2 个答案:

答案 0 :(得分:2)

JScrollPane内添加JTextPane以符合其内容。如果它不起作用,则覆盖getPreferredSize()以根据需要设置首选大小。

 @Override
 public Dimension getPreferredSize() {
     return new Dimension(..., ...);
 }

请参阅How to Use Editor Panes and Text Panes上的 Swing Tutorial 以获取示例。

答案 1 :(得分:0)

Here是如何测量固定宽度

的高度的提示
public static int getContentHeight(String content) {
    JEditorPane dummyEditorPane=new JEditorPane();
    dummyEditorPane.setSize(100,Short.MAX_VALUE);
    dummyEditorPane.setText(content);

    return dummyEditorPane.getPreferredSize().height;
}

int h=getContentHeight("Long text to be measured in the JEditorPane");