JTextArea滚动功能



我目前有一个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);

  • 此语句删除与关联的默认BorderLayoutJFrame,现在它没有任何布局。

  • 因为JFrame的布局变为null,所以需要使用方法,否则它将不可见。

  • 如果设置类似scroll.setBounds(21, 93, 995, 336);的内容,您将能够看到添加了JFrame的JScrollPane

注意: frame.getContentPane().setVisible(true);不会使您的JFrame可见,您需要将其更改为frame.setVisible(true)

始终尝试在swing中使用Layouts,而不是设置null布局。如果你使用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);

相关内容

  • 没有找到相关文章

最新更新