当前位置:  开发笔记 > 编程语言 > 正文

如何在Java Swing中将ScrollBar添加到JTextArea?

如何解决《如何在JavaSwing中将ScrollBar添加到JTextArea?》经验,为你挑选了1个好方法。

任何人都帮助我如何JTextArea使用Swing in Java 添加滚动条?

JTextArea刚消失的时候我添加滚动条就可以了.

希望有人让我在上面添加一个垂直滚动条.

另外的解释将非常感谢

public class Practice extends JFrame {
    JFrame frame = new JFrame("AAA");

    JTextArea textarea = new JTextArea();
    JScrollPane scroll = new JScrollPane(textarea);
    JPanel panelForScroll = new JPanel(null);

    public Practice(){
        frame.setLayout(null);
        frame.setBounds(100,100,400,710);
        frame.setResizable(false);
        frame.setVisible(true);

        textarea.setEditable(false);
        textarea.setFont(new Font("arian", Font.BOLD, 16));
        textarea.setBounds(20, 280, 340, 70);

        panelForScroll.add(scroll);
        frame.add(panelForScroll); //can't find text area....
    }

    public static void main(String[] args) {
        new Practice();
    }
}

Frakcool.. 7

您的代码中有几个错误:

    您使用的是null布局,因为它产生的问题比解决方案,特别是当您尝试使用此不鼓励JScrollPanes,因为他们采取preferredSizeComponent决定是否添加滚动条或没有.看到Null布局是邪恶的,为什么在Swing中使用null布局不赞成?有关此内容的更多信息.要解决此问题,请删除此行:

    frame.setLayout(null);
    

    而是使用布局管理器或它们的组合以及边框,以获得组件之间的额外间距.

    虽然null布局可能看起来是为Swing新手设计复杂GUI的最佳,最简单和最快捷的方式,但是你进步的越多,你会发现与使用它们相关的问题就越多(就像它的情况一样)

    你正在扩展你的课程JFrame,你也在创建一个实例JFrame,请使用其中一个.当你扩展JFrame你说你的班级是一个 JFrame因此它不能被放在另一个,Container因为JFrame是一个僵硬的容器.我建议忘记该extends JFrame部分,因为无论如何你没有使用JFrame由此动作生成的部分并保持你创建的对象.有关此问题的详细解答,请参阅/sf/ask/17360801/.

    在添加所有元素之前,您可以看到GUI,这可能会导致GUI在您将鼠标悬停在其上时不显示所有元素,此行:

    frame.setVisible(true);
    

    应该是程序中的最后一行

    您没有将您的程序放在事件调度线程(EDT)上,这会使您的应用程序不是线程安全的,您可以通过在您的main方法上编写它来修复它.

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            //Place your constructor here
        }
    });
    

    你正在设置边界textArea而不是设置界限scrollPane,但你真的不应该手动设置边界(再次参见第1点).


现在,你可以做一个简单的GUI具有JTextAreaJScrollPane如下:

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class ScrollPaneToTextArea {

    private JTextArea textArea;
    private JFrame frame;
    private JScrollPane scroll;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ScrollPaneToTextArea().createAndShowGui();
            }
        });
    }

    public void createAndShowGui() {
        frame = new JFrame("ScrollPane to TextArea");
        textArea = new JTextArea(10, 20); //Rows and cols to be displayed
        scroll = new JScrollPane(textArea);
//      scroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        frame.add(scroll); //We add the scroll, since the scroll already contains the textArea
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

产生此输出并在需要时添加滚动条(即当文本比它在视图中可以处理的行更远时)

在此输入图像描述 在此输入图像描述

如果您希望始终显示垂直滚动条,则可以取消注释该行:

scroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

这将产生以下输出:

在此输入图像描述 在此输入图像描述

您可以JScrollPane在文档中以及JTextArea在自己的文档中阅读更多相关信息.



1> Frakcool..:

您的代码中有几个错误:

    您使用的是null布局,因为它产生的问题比解决方案,特别是当您尝试使用此不鼓励JScrollPanes,因为他们采取preferredSizeComponent决定是否添加滚动条或没有.看到Null布局是邪恶的,为什么在Swing中使用null布局不赞成?有关此内容的更多信息.要解决此问题,请删除此行:

    frame.setLayout(null);
    

    而是使用布局管理器或它们的组合以及边框,以获得组件之间的额外间距.

    虽然null布局可能看起来是为Swing新手设计复杂GUI的最佳,最简单和最快捷的方式,但是你进步的越多,你会发现与使用它们相关的问题就越多(就像它的情况一样)

    你正在扩展你的课程JFrame,你也在创建一个实例JFrame,请使用其中一个.当你扩展JFrame你说你的班级是一个 JFrame因此它不能被放在另一个,Container因为JFrame是一个僵硬的容器.我建议忘记该extends JFrame部分,因为无论如何你没有使用JFrame由此动作生成的部分并保持你创建的对象.有关此问题的详细解答,请参阅/sf/ask/17360801/.

    在添加所有元素之前,您可以看到GUI,这可能会导致GUI在您将鼠标悬停在其上时不显示所有元素,此行:

    frame.setVisible(true);
    

    应该是程序中的最后一行

    您没有将您的程序放在事件调度线程(EDT)上,这会使您的应用程序不是线程安全的,您可以通过在您的main方法上编写它来修复它.

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            //Place your constructor here
        }
    });
    

    你正在设置边界textArea而不是设置界限scrollPane,但你真的不应该手动设置边界(再次参见第1点).


现在,你可以做一个简单的GUI具有JTextAreaJScrollPane如下:

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class ScrollPaneToTextArea {

    private JTextArea textArea;
    private JFrame frame;
    private JScrollPane scroll;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ScrollPaneToTextArea().createAndShowGui();
            }
        });
    }

    public void createAndShowGui() {
        frame = new JFrame("ScrollPane to TextArea");
        textArea = new JTextArea(10, 20); //Rows and cols to be displayed
        scroll = new JScrollPane(textArea);
//      scroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        frame.add(scroll); //We add the scroll, since the scroll already contains the textArea
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

产生此输出并在需要时添加滚动条(即当文本比它在视图中可以处理的行更远时)

在此输入图像描述 在此输入图像描述

如果您希望始终显示垂直滚动条,则可以取消注释该行:

scroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

这将产生以下输出:

在此输入图像描述 在此输入图像描述

您可以JScrollPane在文档中以及JTextArea在自己的文档中阅读更多相关信息.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有