我JPanel
BoxLayout
。
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS){
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public Dimension minimumLayoutSize(Container target){
return new Dimension(100, 25);
}
@Override
public Dimension maximumLayoutSize(Container target){
return new Dimension(100,25);
}
});
我动态添加了一些JTextPane
和JPanel
。
我调用下面的方法将新JTextPane
添加到我的jpanel并将文本传递给它。
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 // how should I write this:
public Dimension getMinimumSize(){
return new Dimension(text.length()*5, getContentHeight(text.length()*5,text));
}
@Override // how should I write this:
public Dimension getMaximumSize(){
return new Dimension(430, getContentHeight(text.length()*5,text));
}
};
receive.setStyledDocument(doc);
receive.setEditable(false);
// how should I write this:
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();
}
panel.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 :(得分:0)
使用setPreferredSize
,但也许您可能会受益于JScrollPane的正常使用:
panel.add(new JScrollPane(pane));
JTextPane将适应其文档大小,并且JScrollPane会在需要时进一步关注滚动条。
答案 1 :(得分:0)
getPreferredSize()
已经返回了内容的大小。所以解决方案就是不使用setPreferredSize
,而是使用
jtp.setSize(jtp.getWidth(),jtp.getPreferredSize().height);//For fixed width
或
jtp.setSize(jtp.getPreferredSize());//for unlimited width and no wrapping
这将设置JTextPane的高度以匹配其内容。
要使用BoxLayout执行此操作,您可能需要
扩展您的JTextPane并覆盖getMinimumSize
和getMaximumSize
以使其返回getPreferredSize
:
final JTextPane myJTP = new JTextPane() {
@Override
public Dimension getMinimumSize() {
return getPreferredSize();
}
@Override
public Dimension getMaximumSize() {
return getPreferredSize();
}
};
或扩展BoxLayout以使layoutContainer
方法为其子项设置正确的大小。