当前位置: 首页 > 面试题库 >

将ScrollPane添加到JTextArea

嵇永望
2023-03-14
问题内容

我正在为我的大学课程设计一个项目。我只是想知道是否有人知道如何向JTextArea添加scrollBar。目前,我的GUI
布局正确,唯一缺少的是滚动条。

这就是GUI的外观。如您在第二个TextArea上看到的,我想添加滚动条。

这是我创建窗格的代码。但是似乎什么也没发生……t2是
我要添加到的JTextArea。

scroll = new JScrollPane(t2);
    scroll.setBounds(10,60,780,500);
    scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

任何帮助将是巨大的,谢谢!


问题答案:

当您的文本超出查看区域的范围时,滚动条就会出现。不要使用绝对定位,因为手头这么闲聊,总是喜欢布局管理器,请务必阅读第一个链接的第一段,以了解使用布局管理器的优势。

您只需要做的就是使用这个东西:

JTextArea msgArea = new JTextArea(10, 10);
msgArea.setWrapStyleWord(true);
msgArea.setLineWrap(true);

JScrollPane msgScroller = new JScrollPane();        
msgScroller.setBorder(
    BorderFactory.createTitledBorder("Messages"));
msgScroller.setViewportView(msgArea);

panelObject.add(msgScroller);

Here is a small program for your understanding :

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JTextAreaScroller
{
    private JTextArea msgArea;
    private JScrollPane msgScroller;
    private JTextArea logArea;
    private JScrollPane logScroller;
    private JButton sendButton;
    private JButton terminateButton;
    private Timer timer;
    private int counter = 0;
    private String[] messages = {
                                    "Hello there\n",
                                    "How you doing ?\n",
                                    "This is a very long text that might won't fit in a single line :-)\n",
                                    "Okay just to occupy more space, it's another line.\n",
                                    "Don't read too much of the messages, instead work on the solution.\n",
                                    "Byee byee :-)\n",
                                    "Cheers\n"
                                };

    private ActionListener timerAction = new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent ae)
        {
            if (counter < messages.length)
                msgArea.append(messages[counter++]);
            else
                counter = 0;
        }
    };

    private void displayGUI()
    {
        JFrame frame = new JFrame("Chat Messenger Dummy");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new BorderLayout(5, 5));

        JPanel centerPanel = new JPanel();
        centerPanel.setLayout(new GridLayout(0, 1, 5, 5));

        logArea = new JTextArea(10, 10);
        logArea.setWrapStyleWord(true);
        logArea.setLineWrap(true);

        logScroller = new JScrollPane();        
        logScroller.setBorder(
            BorderFactory.createTitledBorder("Chat Log"));
        logScroller.setViewportView(logArea);

        msgArea = new JTextArea(10, 10);
        msgArea.setWrapStyleWord(true);
        msgArea.setLineWrap(true);

        msgScroller = new JScrollPane();        
        msgScroller.setBorder(
            BorderFactory.createTitledBorder("Messages"));
        msgScroller.setViewportView(msgArea);

        centerPanel.add(logScroller);
        centerPanel.add(msgScroller);

        JPanel bottomPanel = new JPanel();

        terminateButton = new JButton("Terminate Session");
        terminateButton.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent ae)
            {
                if (timer.isRunning())
                    timer.stop();
                else
                    timer.start();
            }
        });
        sendButton = new JButton("Send");

        bottomPanel.add(terminateButton);
        bottomPanel.add(sendButton);

        contentPane.add(centerPanel, BorderLayout.CENTER);
        contentPane.add(bottomPanel, BorderLayout.PAGE_END);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);

        timer = new Timer(1000, timerAction);
        timer.start();
    }

    public static void main(String... args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new JTextAreaScroller().displayGUI();
            }
        });
    }
}

Here is the outcome of the same :

JTEXTAREA SCROLLER



 类似资料:
  • 问题内容: RelativeLayout layout = new RelativeLayout(this); AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); View gameView = initializeForView(new MainGame(), config); 什么也没显

  • 问题内容: 现在,我正在通过jquery加载iframe: 我有一个自定义样式表,希望将其应用于该页面。iframe中的页面不在同一域中,这就是为什么它很棘手的原因。我找到了允许您添加单个标签但不能添加整个样式表的解决方案。 编辑: 有问题的页面通过Mobile Safari 加载,因此跨域策略不适用。 问题答案: 基于解决方案您已经找到了如何将CSS应用于iframe?: 或更多jqueryis

  • 问题内容: 我有一个gui,它的Panel包含一系列标签和TextField,并使用spring布局(这是mainPanel),而另一个Panel仅包含button(buttonPanel)。我正在尝试使我的mainPanel也具有垂直滚动条。我想实现我的GUI,以便在JFrame中有2个面板。mainPanel出现在框架的顶部,而buttonPanel出现在mainPanel的下方。 我的问题是

  • 问题内容: 我正在尝试使用standard共享图像,可以使用以下代码在 Facebook , Twitter 和 Save Image 上 共享: 我还需要一件事, Instagram : 这两个代码分别工作正常,如何将 Instagram 添加到?有可能吗? 问题答案: 我认为将其他社交共享添加到您为Instagram编写的代码中会更加容易。“ .igo”扩展名是Instagram专有的,因此其

  • 问题内容: 我今天在这个主题上搜索了很多。但是我找不到它,如何将JSONArray添加到JSONObject? 因为每次执行此操作都会收到此错误:Stackoverflow 我收到此错误: 我想要的JSON:只有最后一个JsonArray出问题了: ,“ vloer”:[{formaat:’vierkant10x15’tegels:[{naam:’‘,imgThumb:’/bla/bla.png’