将ScrollPane添加到JTextArea

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

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

GUI

这是我创建窗格的代码。 但似乎没有发生任何事情…… 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); 

这是一个供您理解的小程序:

 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(); } }); } } 

以下是相同的结果:

JTEXTAREA SCROLLER

默认情况下,滚动条仅在内容溢出可用可查看区域时显示

您可以通过JScrollPane#setVerticalScrollBarPolicy方法更改此值,并将其传递给ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS