Java JTextArea具有自适应宽度问题
我想要一个Java JTextArea具有自适应宽度问题,java,swing,jtextarea,word-wrap,Java,Swing,Jtextarea,Word Wrap,我想要一个JTextArea,它的行为如下: 始终显示垂直滚动条 当文本到达行尾时,它将在下一行继续(而不是在同一行继续但被隐藏) 调整窗口大小时,文本将刷新,因此,例如,如果窗口较大,文本的高度将降低 第1点。这很容易,但我找不到第二点的方法。因此,任何帮助都将不胜感激。以下是我编写的示例代码: public class TestCode2 { public static void main(String[] args) { JFrame window = new JFrame
JTextArea
,它的行为如下:
public class TestCode2 {
public static void main(String[] args) {
JFrame window = new JFrame("Test2");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setSize(400, 200);
JPanel container = new JPanel(new BorderLayout());
window.add(container);
JLabel labelNorth = new JLabel("North");
container.add(labelNorth, BorderLayout.NORTH);
JLabel labelSouth = new JLabel("South");
container.add(labelSouth, BorderLayout.SOUTH);
JTextArea ta = new JTextArea();
JScrollPane taScrollPane = new JScrollPane(ta);
taScrollPane
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
taScrollPane
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
container.add(taScrollPane);
window.setVisible(true);
}
}
这:
当到达当前行的末尾时,将使textarea继续位于下一行。基本上,jtextarea.setLineWrap(true)
告诉textarea继续到下一个换行词,即您将得到如下结果:
_________
|I'm so co|
|ol |
|_________|
然后,jtextarea.setWrapStyleWord(true)
告诉textarea启用换行,因此结果如下:
_________
|I'm so |
|cool |
|_________|
要在帧调整大小时调整JTextArea
,请使用ComponentListener
jframe.addComponentListener(new ComponentAdapter(){
public void componentResized(ComponentEvent e) {
//the frame was resized, resize the textarea here
}
});
更新
正如mKorbel所说,要调整
JTextArea
的大小,请使用LayoutManager
并让它完成另一个答案中提到的所有工作,与换行和换行样式相关的JTextArea
两种方法很重要,但不需要组件侦听器。请参阅此代码的密切变体,它建议构造函数的列和行中的文本区域大小,并打包GUI
import java.awt.BorderLayout;
import javax.swing.*;
public class TestCode2 {
public static void main(String[] args) {
JFrame window = new JFrame("Test2");
window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel container = new JPanel(new BorderLayout());
window.add(container);
JLabel labelNorth = new JLabel("North");
container.add(labelNorth, BorderLayout.PAGE_START);
JLabel labelSouth = new JLabel("South");
container.add(labelSouth, BorderLayout.PAGE_END);
JTextArea ta = new JTextArea(7,30);
ta.setWrapStyleWord(true);
ta.setLineWrap(true);
JScrollPane taScrollPane = new JScrollPane(ta);
taScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
taScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
container.add(taScrollPane);
window.pack();
window.setVisible(true);
}
}
第2点。换行是可设置的
JTextArea
的属性
API文档:
public void setLineWrap(boolean wrap)
将此添加到您的代码中:
ta.setLineWrap(true);
请删除以
开头的所有内容以调整JTextArea的大小代码>,这是LayoutManager的工作是的,这完全是我所需要的,我可能在这里询问之前已经搜索了一段时间,但是不用担心,谢谢!
ta.setLineWrap(true);