我有使用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的修复大小?
答案 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");