JTextArea 滚动功能
JTextArea scroll functionality
我目前有一个 Java 应用程序正在使用 JTextArea
的实例向用户呈现数据。他们按下一个按钮,然后填充从数据库中存储的数据。
没有垂直滚动条,数据库中的表包含的行数超过了屏幕。
如何向该文本区域添加垂直滚动条?
代码的许多部分都依赖于写入 JTextArea
,重构代码以适应打印到另一种类型的容器将花费大量时间。
有什么方法可以将 JTextArea
包装成 ScrollPane
吗?
当前代码(显示无滚动条的文本区域):
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 1057, 484);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JTextArea mainTextArea = new JTextArea();
mainTextArea.setLineWrap(true);
mainTextArea.setWrapStyleWord(true);
mainTextArea.setBounds(21, 93, 995, 336);
frame.getContentPane().add(mainTextArea);
// (continued...)
我尝试将代码包装在滚动窗格中(文本区域和滚动条均未出现):
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 1057, 484);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JTextArea mainTextArea = new JTextArea();
mainTextArea.setLineWrap(true);
mainTextArea.setWrapStyleWord(true);
mainTextArea.setBounds(21, 93, 995, 336);
JScrollPane scroll = new JScrollPane (MainTextArea);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
frame.getContentPane().add(scroll);
frame.getContentPane().setVisible(true);
// (continued...)
你犯了几个错误
frame.getContentPane().setLayout(null);
此语句删除与关联的默认 BorderLayout
JFrame,现在它没有任何布局。
因为 JFrame 的布局变为 null 你需要使用
在添加到 JFrame 之前为 JScrollpane 设置边界()方法,否则它将不可见。
- 如果你这样设置
scroll.setBounds(21, 93, 995, 336);
你将能够看到添加了 JFrame 的 JScrollPane
注意: frame.getContentPane().setVisible(true);
不会使您的 JFrame 可见,您需要将其更改为 frame.setVisible(true)
.
始终尝试在 swing 中使用布局而不是设置 null layout.If 你使用 null 布局你需要手动指定 setBounds,这不是在 swing 中设计 UI 的好方法。
不使用任何布局的完整工作代码:
package com.jd.swing;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class JFrameExample {`enter code here`
private JFrame frame;
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 1057, 484);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JTextArea MainTextArea = new JTextArea();
MainTextArea.setLineWrap(true);
MainTextArea.setWrapStyleWord(true);
MainTextArea.setBounds(21, 93, 995, 336);
JScrollPane scroll = new JScrollPane(MainTextArea);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scroll.setBounds(21, 93, 995, 336);
frame.getContentPane().add(scroll);
frame.setVisible(true);
}
public static void main(String[] args) {
new JFrameExample().initialize();
}
}
仅供参考,
如果文本区域有多行,滚动条默认滚动到文本区域的末尾。要使文本区域中的行保持换行并将滚动条保持在文本区域的顶部,以下代码将有所帮助
MainTextArea.setWrapStyleWord(true);
MainTextArea.setLineWrap(true);
DefaultCaret caret = (DefaultCaret) MainTextArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
我目前有一个 Java 应用程序正在使用 JTextArea
的实例向用户呈现数据。他们按下一个按钮,然后填充从数据库中存储的数据。
没有垂直滚动条,数据库中的表包含的行数超过了屏幕。
如何向该文本区域添加垂直滚动条?
代码的许多部分都依赖于写入 JTextArea
,重构代码以适应打印到另一种类型的容器将花费大量时间。
有什么方法可以将 JTextArea
包装成 ScrollPane
吗?
当前代码(显示无滚动条的文本区域):
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 1057, 484);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JTextArea mainTextArea = new JTextArea();
mainTextArea.setLineWrap(true);
mainTextArea.setWrapStyleWord(true);
mainTextArea.setBounds(21, 93, 995, 336);
frame.getContentPane().add(mainTextArea);
// (continued...)
我尝试将代码包装在滚动窗格中(文本区域和滚动条均未出现):
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 1057, 484);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JTextArea mainTextArea = new JTextArea();
mainTextArea.setLineWrap(true);
mainTextArea.setWrapStyleWord(true);
mainTextArea.setBounds(21, 93, 995, 336);
JScrollPane scroll = new JScrollPane (MainTextArea);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
frame.getContentPane().add(scroll);
frame.getContentPane().setVisible(true);
// (continued...)
你犯了几个错误
frame.getContentPane().setLayout(null);
此语句删除与关联的默认 BorderLayout JFrame,现在它没有任何布局。
因为 JFrame 的布局变为 null 你需要使用 在添加到 JFrame 之前为 JScrollpane 设置边界()方法,否则它将不可见。
- 如果你这样设置
scroll.setBounds(21, 93, 995, 336);
你将能够看到添加了 JFrame 的 JScrollPane
注意: frame.getContentPane().setVisible(true);
不会使您的 JFrame 可见,您需要将其更改为 frame.setVisible(true)
.
始终尝试在 swing 中使用布局而不是设置 null layout.If 你使用 null 布局你需要手动指定 setBounds,这不是在 swing 中设计 UI 的好方法。
不使用任何布局的完整工作代码:
package com.jd.swing;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class JFrameExample {`enter code here`
private JFrame frame;
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 1057, 484);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JTextArea MainTextArea = new JTextArea();
MainTextArea.setLineWrap(true);
MainTextArea.setWrapStyleWord(true);
MainTextArea.setBounds(21, 93, 995, 336);
JScrollPane scroll = new JScrollPane(MainTextArea);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scroll.setBounds(21, 93, 995, 336);
frame.getContentPane().add(scroll);
frame.setVisible(true);
}
public static void main(String[] args) {
new JFrameExample().initialize();
}
}
仅供参考,
如果文本区域有多行,滚动条默认滚动到文本区域的末尾。要使文本区域中的行保持换行并将滚动条保持在文本区域的顶部,以下代码将有所帮助
MainTextArea.setWrapStyleWord(true);
MainTextArea.setLineWrap(true);
DefaultCaret caret = (DefaultCaret) MainTextArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);