gpt4 book ai didi

java - 在Swing中,如何将计算后的结果自动加载到框架中?

转载 作者:行者123 更新时间:2023-12-01 13:38:30 25 4
gpt4 key购买 nike

我正在学习构建 GUI。现在我有一个按钮。单击按钮后,程序将运行一些计算。我想重定向输出并将其添加到我创建的框架中。然而,我发现它仅在我调整框架大小时更新,但不会自动更新。有人会告诉我如何自动执行此操作吗?

部分代码为

jbtnAlpha.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae){
Runnable runnable = new SVMthread(fnm_train,fnm_test,fnm_result,jfrm);
Thread t = new Thread(runnable);
t.start();
}
});

SVMthread 在这里定义

public class SVMthread implements Runnable{
private String fnm_train;
private String fnm_test;
private String fnm_result;
private JFrame jfrm;
SVMthread(String fnm_train,String fnm_test,String fnm_result,JFrame jfrm){
this.fnm_train=fnm_train;
this.fnm_test=fnm_test;
this.fnm_result=fnm_result;
this.jfrm=jfrm;
}
public void run(){
try {
jfrm.add(new ResultPanel());
LibSVMTest.SVMrun(fnm_train,fnm_test,fnm_result);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

ResultPanel 是我重定向输出的位置

public class ResultPanel extends JPanel {
private JTextArea textArea = new JTextArea(15, 30);
private TextAreaOutputStream taOutputStream = new TextAreaOutputStream(
textArea, "Test");

public ResultPanel() {
setLayout(new BorderLayout());
add(new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
System.setOut(new PrintStream(taOutputStream));
}

}

最佳答案

  1. 永远不要像您现在所做的那样在后台线程中进行大多数 Swing 调用。这就像捕获老虎的尾部一样——它会转身咬你。
  2. 在 Swing 容器中添加或删除组件后,对容器调用 revalidate()repaint() 以使其重新布局其组件并重新绘制他们。
<小时/>

编辑
关于您的评论:

I am new to this. Would you explain more what do you mean by background? Sorry if it is a dumb question.

Google:Swing 中的并发性。它会回答您的问题。

关于java - 在Swing中,如何将计算后的结果自动加载到框架中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21051354/

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