我的当前的解决方案,这似乎相当难看,是从JTextArea
实施延伸JTextPane
,借用代码:当线路长度比滚动面板的视口的宽度更大
textArea = new JTextPane() {
int maxWidth;
int rowHeight;
void init(Font font) {
FontMetrics fontMetrics = getFontMetrics(font);
maxWidth = fontMetrics.charWidth('M') * 80;
rowHeight = fontMetrics.getHeight();
}
{
initFont(getFont());
}
@Override
public void setFont(Font font) {
init(font);
super.setFont(font);
}
@Override
public Dimension getPreferredScrollableViewportSize() {
Dimension base = super.getPreferredSize();
Insets insets = getInsets();
int width = Math.min(maxWidth, base.width) + insets.left + insets.right;
int estimatedRows = Math.max(1, (int) Math.ceil(base.getWidth()/maxWidth));
int height = estimatedRows * rowHeight + insets.top + insets.bottom;
return new Dimension(width, height);
}
};
甲的JTextPane将自动换行。您使用的布局管理器将根据框架中可用的空间确定滚动窗格的大小。发布你的[mcve]来证明问题。 – camickr
检查此:http://stackoverflow.com/questions/39455573/how-to-set-fixed-width-but-dynamic-height-on-jtextpane/39466255#39466255 – Sharcoux