JTextArea 中 setText() 的机制?

2024-02-08

我尝试在我的中显示一些文字JTextArea在运行时。但是当我使用循环时setText按顺序显示文本,它只显示最后一个循环的文本 这是我的代码:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
 for (int i=0;i<10;i++)
     jTextArea1.setText("Example "+i);
}                                        

我想要它显示"Example 1", "Example 2",..,"Example 9"。但只显示一次”Example 9"

有谁可以帮我解释一下吗??


setText就是这样做的,它将字段的文本“设置”为您提供的值,删除所有以前的内容。

你想要的是JTextArea#append http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextArea.html#append(java.lang.String)

如果您使用的是 Java 8,另一个选择可能是StringJoiner https://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html

StringJoiner joiner = new StringJoiner(", ");
for (int i = 0; i < 10; i++) {
    joiner.add("QUang " + i);
}
jTextArea1.setTexy(joiner.toString());

(假设您想每次替换文本actionPerformed方法被调用,但您仍然可以使用append)

根据评论的假设进行更新

我“假设”你的意思是你想要每一个String显示一小段时间,然后替换为下一个String.

Swing 是单线程环境,因此任何阻塞事件调度线程的东西(例如循环)都会阻止 UI 更新。相反,您需要使用 SwingTimer例如,定期安排回调并在每次更新时更改 UI。

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

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

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private String[] messages = {
            "Example 1",
            "Example 2",
            "Example 3",
            "Example 4",
            "Example 5",
            "Example 6",
            "Example 7",
            "Example 8",
            "Example 9",
        };

        private JTextArea ta;
        private int index;

        private Timer timer;

        public TestPane() {
            setLayout(new BorderLayout());
            ta = new JTextArea(1, 20);
            add(new JScrollPane(ta));

            JButton btn = new JButton("Start");
            btn.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    if (timer.isRunning()) {
                        timer.stop();
                    }
                    index = 0;
                    timer.start();
                }
            });
            add(btn, BorderLayout.SOUTH);

            timer = new Timer(500, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    if (index < messages.length) {
                        ta.setText(messages[index]);
                    } else {
                        timer.stop();
                    }
                    index++;
                }
            });
        }

    }

}

看一下Swing 中的并发 http://docs.oracle.com/javase/tutorial/uiswing/concurrency/ and 如何使用 Swing 定时器 http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html更多细节

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JTextArea 中 setText() 的机制? 的相关文章

随机推荐

  • Selenium Instagram 机器人 - 单击“喜欢”按钮

    我已经编写了一个程序来访问 Instagram 探索页面 并喜欢前六张照片 现在 我正在使用这种相当复杂的方法来查找 喜欢 按钮 我更愿意将其格式化为 单击登录按钮 部分 到目前为止 我已经尝试检查各种元素 但我无法确定正确的元素以使其唯一
  • Chart.js 圆环图大小调整

    我在用着ng2 图表 https github com valor software ng2 charts在 Angular 项目中 我有该项目的两个版本 当前的生产版本是旧版本 并且使用旧版本的 ng2 charts 以及扩展的 Char
  • Rust 中与闭包和生命周期作斗争

    我正在尝试将一些基准测试从 F 移植到 Rust F 代码如下所示 let inline iterNeighbors f i j f i 1 j f i 1 j f i j 1 f i j 1 let rec nthLoop n s1 Ha
  • 休息删除线

    是否可以在重组文本中删除文本 例如呈现为
  • 将自定义控件中的编辑框动态绑定到托管 bean

    我读过许多关于在自定义控件中动态绑定字段的优秀帖子和文章 但它们都假设了文档数据源 我想允许托管 bean 数据源的可能性 我尝试将属性类型设置为com ibm xsp model DataSource or com ibm xsp ext
  • Enunciate 能否为处理泛型类型的 API 生成文档?

    给定一个抽象的通用 Resource 类和一个具体的实现 public abstract class AbstractResource
  • 如何阻止混淆整个包?

    我需要防止 Proguard 混淆包中的任何类com foo 我努力了 keep com foo
  • 如何模拟当前日期?

    我的代码中有一个方法可以验证当天是否正常工作 它会为此检查数据库日历 方法如下所示 public boolean iBusinessDayToday LocalDate today LocalDate now logic with toda
  • 基于属性值的条件(XML 架构)

    是否可以在 XML 模式中定义基于属性值的条件 例如 当test attrib one 我想one element被允许和强制或当test attrib two 我想two element是允许的和强制性的 例如 有效文件是
  • 如何使用控制台生产者在 Kafka 0.11 中生成带有标头的消息?

    如何使用控制台生产者在 Kafka 0 11 中生成带有标头的消息 我在Kafka文档中没有找到任何关于此的描述 Update 从 Kafka 3 2 开始 您可以使用以下命令生成带标题的记录kafka console producer s
  • 将变量从组件传递到模型范围

    我正在使用基于 Laravel 的 OctoberCMS 我正在尝试从 URL 获取标识符并将其传递到范围以过滤数据库结果 this gt property username 起作用并从 URL 返回用户名 但是如何将它传递给模型和范围函数
  • JSON 点符号转字符串

    我在 javascript 中使用 JSON 并且尝试获取点表示法表示的字符串值 例如AAA BBB 0 CCC DDD 5 EEE 123 采用 JSON 点表示法格式 但我想获得价值AAA BBB 0 CCC DDD 5 EEE作为字符
  • 我可以有一个模板函数指针的 std::vector 吗?

    我有一个模板函数 我想将它的指针存储在std vector 该函数如下所示 template
  • 在easeljs中添加一个简单的图像

    这是我的 html 代码
  • css 字体大小和行高与基线不匹配

    我正在尝试做一些应该非常简单的事情 但我在失败和论坛之间度过了一天 我想调整我的字体以匹配我的基线 在 indesign 中只需点击一下即可 但在 css 中这看起来是地球上最困难的事情 让我们举一个有理值的简单例子 在这张图片上 我每 2
  • SQL 查询检查名称是否以元音开头和结尾

    我想查询名单CITY表中的名称STATION id city longitude latitude 它们的第一个和最后一个字符都是元音 结果不能包含重复项 为此 我写了一个查询 例如WHERE NAME LIKE a 它有 25 个条件 每
  • Webpack启动,导入错误

    我正在开始使用 Webpack 但已经遇到了以下问题 我创建了一个 app index js 文件 如文档中指定的 我还创建了一个 index html 文件 从文档中复制了 HTML 和 CSS 我在 CLI 中运行了正确的命令 包括生成
  • Artifactory 缺少 Android 依赖项

    相关找不到runtime jar android arch lifecycle runtime 1 0 0 https stackoverflow com questions 50563338 could not find runtime
  • 如何仅选择 BLOB 列的一部分

    在 SQLite 数据库中 如何从 BLOB 字段中仅选择 1kb 我想象它是这样的 SELECT PART field name startIndex bytes AS data FROM table 这可能吗 Use substr ht
  • JTextArea 中 setText() 的机制?

    我尝试在我的中显示一些文字JTextArea在运行时 但是当我使用循环时setText按顺序显示文本 它只显示最后一个循环的文本 这是我的代码 private void jButton1ActionPerformed java awt ev