как установить предпочтительный размер jtextpane на размер его содержимого?

У меня есть Jpanel с Boxlayout, и некоторые 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);, так как я могу установить размер исправления для текстовой панели?


person user90    schedule 22.07.2014    source источник
comment
Лучше поделитесь кодом.   -  person Braj    schedule 22.07.2014


Ответы (2)


Добавьте JTextPane внутрь JScrollPane, чтобы соответствовать его содержание. Если это не работает, переопределите getPreferredSize(), чтобы установить предпочтительный размер, если это необходимо.

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

См. Учебное пособие по Swing в разделе Как использовать панели редактора и Текстовые панели для примера.

person Braj    schedule 22.07.2014
comment
Моя проблема заключается в том, чтобы установить правильный размер. Как я могу найти подходящую ширину и высоту? - person user90; 22.07.2014
comment
Мне нужен способ для java, а не для javascript. - person user90; 23.07.2014
comment
Вы писали код на java? пожалуйста, поделитесь, если вам нужна помощь, которая дает возможность выяснить проблему в вашем коде. - person Braj; 23.07.2014

здесь совет, как измерить высоту для фиксированной ширины

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");
person StanislavL    schedule 23.07.2014
comment
Я использую jtextpane, у которого есть стиль, как я могу установить свой стиль в JEditorPane, чтобы он правильно getContentHeight? - person user90; 23.07.2014