我需要一个标签,根据可用的大小对包含文本进行换行。由于JTextArea
可以换行,我使用它并相应地设置它,因此它类似于JLabel
。
问题是JTextArea
只会增加它的宽度,但不会再次缩小它。所以我有一个带有一些包装文本的初始窗口大小,然后我将窗口调整为更宽,文本将相应调整,但再次使窗口变小不会使JTextArea
更小,而是滚动条出现。
这只发生在两者:
JTextArea
位于JPanel
上JScrollPane
setLineWrap(true)
用于JTextArea
删除JScrollPane
会产生预期的行为,但我确实需要滚动整个内容,因为JPanel
上可能还需要其他元素。
当窗口缩小时,如何让它再次变小?
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
/**
* SSCCE to demonstrate the JTextArea behaviour
*/
public class WrapLabelTest {
public static final void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
testGui();
}
});
}
private static final String TEST_TEXT = "Textfortestingandstufflongenough"
+ "foralinebreak";
private static void testGui() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.anchor = GridBagConstraints.WEST;
gbc.weightx = 1;
gbc.weighty = 1;
panel.add(new WrapLabel(TEST_TEXT), gbc);
//
// gbc.gridy = 1;
// panel.add(new WrapLabel(TEST_TEXT), gbc);
frame.add(new JScrollPane(panel));
frame.setSize(200, 100);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
}
class WrapLabel extends JTextArea {
private static final JLabel LABEL = new JLabel();
public WrapLabel() {
setWrapStyleWord(true);
setLineWrap(true);
setBackground(LABEL.getBackground());
setFont(LABEL.getFont());
setBorder(LABEL.getBorder());
setFocusable(false);
setForeground(LABEL.getForeground());
setOpaque(false);
}
public WrapLabel(String text) {
this();
setText(text);
}
@Override
public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
// Debug output
System.out.println(d);
return d;
}
}
答案 0 :(得分:0)
我在带有Gridlayout的JPanel中有一个JTextArea,但是有这个问题。 只需设置TextArea最小尺寸即可解决我的问题。
textArea.setMinimumSize(new Dimension(20,40));