我正在尝试使用JTextArea实现JScrollPane.JTextArea被附加到,我希望JScrollPane在添加更多文本时继续向下滚动.怎么能实现这一目标?
我有一个基本聊天应用程序.我JTextArea用于缓冲区.添加消息后,我想滚动到底部.怎么能实现这一目标?
我发现没有会员功能允许我这样做.
这是一段可运行的代码,显示了我的"问题".
我有一个被JTextArea包裹的JScrollPane.当我更改文本时JTextArea,JScrollPane滚动会自动滚动到文本的末尾,我不希望这样.
这是我的要求:
(即使文本比水平方式更多,应用程序和用户都不应该能够水平滚动.垂直方向,只有用户才能滚动.)
我不知道如何"修复"这个问题:应该使用JTextArea或JScrollPane方法修复吗?
请注意,AFAICT根本不重复:JTextPane阻止在父JScrollPane中滚动
这是一个有趣的例子,它每隔200毫秒放入新文本JTextArea,你可以看到JScrollPane总是自动滚动到文本的末尾.
import javax.swing.*;
import java.awt.*;
import java.util.Random;
public final class TextInScrollPane extends JFrame {
private static final Random r = new Random( 42 );
public static void main( final String[] args ) {
final JFrame f = new JFrame();
f.setDefaultCloseOperation( EXIT_ON_CLOSE ); …Run Code Online (Sandbox Code Playgroud) 我试图在包含JTextPane的JScrollPane上实现智能自动滚动.JTextPane用于以彩色记录我的应用程序.然而,我正试图进行智能自动滚动.通过智能自动滚动我并不是指每次发生变化时盲目地自动滚动,我的意思是检查你是否一直向下滚动,然后自动滚动.然而,无论我做什么,它总是自动滚动或根本不自动滚动
作为测试脚本,这里是设置(JFrame已被忽略)
final JTextPane textPane = new JTextPane();
textPane.setEditable(false);
final JScrollPane contentPane = new JScrollPane(textPane);
contentPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
Run Code Online (Sandbox Code Playgroud)
这是丑陋的自动添加测试循环
while (true)
try {
Thread.sleep(1000);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
JScrollBar scrollBar = scroll;
boolean preCheck = ((scrollBar.getVisibleAmount() != scrollBar.getMaximum()) && (scrollBar.getValue() + scrollBar.getVisibleAmount() == scrollBar.getMaximum()));
System.out.println("Value: " + scroll.getValue()
+ " | Visible: " + scrollBar.getVisibleAmount()
+ " | Maximum: " + scrollBar.getMaximum()
+ " | Combined: " + (scrollBar.getValue() + scrollBar.getVisibleAmount())
+ …Run Code Online (Sandbox Code Playgroud) 我创建在用户输入文本的应用程序TextField从该文本被附加到TextArea时的actionPerformed.
将TextArea是一个加JScrollPane.当声明列的行数出来时,用户可以滚动查看文本.但是当他输入一些文本到TextAreavia 时,他需要每次滚动,TextField因为附加到的最后一行TextArea不会自动滚动到最后一行.
任何人都可以帮我在那里如何自动或当actionPerformed,TextArea将滚动到最后?
JFormattedTextField我有带有(s)的框架。我的简化代码如下所示:
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(100,100);
frame.setLayout(new GridLayout(2,2));
JFormattedTextField field1 = new JFormattedTextField(NumberFormat.getInstance());
field1.setValue(0.4);
frame.add(new JLabel("value A"));
frame.add(field1);
JFormattedTextField field2 = new JFormattedTextField(NumberFormat.getInstance());
field2.setValue(0.8);
frame.add(new JLabel("value B"));
frame.add(field2);
frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
生成:
当我单击/关注任何 JFormattedTextField 时,我希望它自动将插入符号放在末尾
我在打电话之前尝试使用以下解决方案frame.setVisible(true);,但似乎都不起作用
来自如何在 Java GUI 中设置 JTextArea 的自动滚动?
field1.setCaretPosition(field1.getDocument().getLength());
Run Code Online (Sandbox Code Playgroud)
来自https://tips4java.wordpress.com/2008/10/22/text-area-scrolling/ ((DefaultCaret)field2.getCaret()).setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);