Java 启用换行时,JTextArea从不收缩
我需要一个标签,将线包装包含的文字根据可用的大小。由于Java 启用换行时,JTextArea从不收缩,java,swing,jscrollpane,jtextarea,gridbaglayout,Java,Swing,Jscrollpane,Jtextarea,Gridbaglayout,我需要一个标签,将线包装包含的文字根据可用的大小。由于JTextArea可以换行,因此我使用了它并相应地对其进行了样式设置,使其类似于JLabel 问题是JTextArea只会增加其宽度,但不会再次缩小。因此,我有一个带有一些包装文本的初始窗口大小,然后我将窗口调整为更宽,文本将相应地调整,但是再次缩小窗口不会使JTextArea变小,而是会出现一个滚动条 这仅在以下两种情况下发生: JTextArea位于JPanel上,该面板本身位于JScrollPane setLineWrap(true)
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;
}
}
启用换行时,JTextArea从不收缩
我在JPanel中有一个JTextArea,它的Gridlayout有这个问题。
只需设置TextArea的最小大小,即可解决此问题
textArea.setMinimumSize(new Dimension(20,40));
您可以使用
JLabel
,如图所示将文本包装在
中,但可能不使用额外的面板。尝试将其直接添加到JScrollPane。如果您需要面板中的更多内容,只需不直接添加JTextArea,而是再添加一个JScrollPane即可。在这种情况下,带有
的JLabel
不会换行(位于JScrollPane
上)。无论哪种方式,如果单词太长,它都不会像JTextArea
那样封装在单词中。我不能直接将它添加到JScrollPane
,我需要整个JPanel
可以滚动。如果我包装JTextArea
是另一个JScrollPane
,它不会改变行为。