java - 清除 Swing 中按钮单击操作的文本字段

标签 java swing user-interface jtextfield

我有许多按钮,单击这些按钮将运行脚本,如果成功,将生成一条通过/失败消息,显示在使用 Swing 的 GUI 上的文本字段中。我注意到,即使单击新按钮运行脚本后,仍会显示先前结果的文本。该文本将一直显示,直到脚本完成,生成一个新结果,然后显示。

我想添加一些代码,以便在单击新按钮时重置文本字段,并且在脚本完成之前不会显示任何文本。

一个按钮:

    Test1 = new JButton("Test1");
    Test1.setLocation(290, 30);
    Test1.setSize(120, 30);
    Test1.addActionListener(this);
    Test1.addMouseListener(new MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent e) {
            if (Test1.isEnabled()) {
                errorLabel.setText("");
                result = JUnitCore.runClasses(Test1.class);
                errorMessageDisplay(result);
            }
        }
    });
    buttonPanel.add(Test1);

错误消息的代码:

public void errorMessageDisplay(Result resultPass) {
    errorLabel.addMouseListener(new MouseAdapter(){
        @Override
        public void mouseClicked(MouseEvent e){
            errorLabel.setText("");
            errorLabel.setVisible(true);
        }
    });


    if (result.getFailureCount() > 0) {
        errorLabel.setForeground(Color.red);
        errorLabel.setVisible(true);
        errorLabel.setText(" Failed");
    }

    else {
        errorLabel.setForeground(Color.green);
        errorLabel.setText(" Passed");
        errorLabel.setVisible(true);
    }
}

最佳答案

最简单的解决方案是创建另一个线程。

if (Test1.isEnabled()) {
    errorLabel.setText("");
    new Thread(()->{
        Result result = JUnitCore.runClasses(Test1.class);
        EventQueue.invokeLater(()->errorMessageDisplay(result));
    }).start();
}

这不是一个很好的解决方案,请考虑使用 SwingWorker或 ExecutorService。

使用执行程序服务的一个简单示例是在启动时创建一个执行程序。

ExecutorService service = Executors.newSingleThreadExecutor();

然后向其提交作业。

if (Test1.isEnabled()) {
    errorLabel.setText("");
    service.submit(()->{
        Result result = JUnitCore.runClasses(Test1.class);
        EventQueue.invokeLater(()->errorMessageDisplay(result));
    });
}

这将允许您提交多个作业,但它们将连续运行。您也可以通过 GUI 控制作业流程。

if (Test1.isEnabled()) {
    test1.setEnabled(false);
    errorLabel.setText("");
    service.submit(()->{
        Result result = JUnitCore.runClasses(Test1.class);
        EventQueue.invokeLater(()->{
            errorMessageDisplay(result);
            test1.setEnabled(true);
        });
    });
}

关于java - 清除 Swing 中按钮单击操作的文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39847850/

相关文章:

java - 删除右上角的关闭 (X) 按钮并在 JFrame 上保留最小/最大

java 。 Swing 。 JComponent 的可点击区域

c++ - 使用 QT 窗口作为 C++ 单元测试的一部分

c++ - 调整窗体大小时调整控件大小

java - Java中使用JNI加载Teamspeak动态链接库

java - 混淆后将 JavaBean 与 JasperReports API : Getting java. lang.NoSuchMethodException 一起使用

java - java 构建速度慢,我喜欢进行小的增量更改并在浏览器中查看页面

angularjs - 如何创建类似 Facebook 或 WhatsApp 的搜索框? (移动的)

java - 如何解决这个Treeset程序?

java - 如何在redis中获取具有特殊值的第一个键?