gpt4 book ai didi

java - 将 ScrollPane 添加到 JTextArea

转载 作者:行者123 更新时间:2023-11-29 10:04:32 26 4
gpt4 key购买 nike

我正在为我的大学类(class)做一个项目。我只是想知道是否有人知道如何将滚动条添加到 JTextArea。目前我的 GUI 布局正确,唯一缺少的是滚动条。

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

GUI

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

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

任何帮助都会很棒,谢谢!

最佳答案

当您的文本超出 View 区域的边界时,滚动条就会出现。不要使用 Absolute Positioning ,对于这样的闲聊,总是喜欢Layout Managers , 请阅读第一个链接的第一段,了解使用布局管理器的优势。

你只需要使用这个东西:

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

关于java - 将 ScrollPane 添加到 JTextArea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13096045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com