gpt4 book ai didi

java - 多线程扩展面板

转载 作者:行者123 更新时间:2023-12-01 21:42:24 25 4
gpt4 key购买 nike

我正在尝试分配一个在JFrame 中实现Runnable 接口(interface)的JPanel。我制作这个样本是为了解释我的想法。我想添加一个多线程面板,该面板将文本显示为演示,并将 String 作为新实例的参数。面板应该有独立的进程,所以我实现了 Runnable 接口(interface)。但是,当我尝试使用类的新实例创建新的面板实例时,它不起作用。

我做错了什么?

imagePanel面板类:

public class imagePanel extends JPanel implements Runnable{
JLabel imageTest;

public imagePanel(String textLabel)
{
this.setPreferredSize(new Dimension(300,300));
imageTest = new JLabel(textLabel);
imageTest.setPreferredSize(this.getPreferredSize());
}

public void setImageText(String newText){
imageTest.setText(newText);
}

public void run(){
this.add(imageTest);
}

}

主类测试类:

public class test {
public static void main(){
JFrame frame = new JFrame("Test Window");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(300,300));

JPanel panel = new imagePanel("Text label");
panel.setPreferredSize(frame.getPreferredSize());

frame.add(panel);
frame.setVisible(true);
}
}

最佳答案

  1. Swing 不是线程安全的,这意味着 UI 的更新只能在事件调度线程的上下文中进行。请参阅Concurrency in Swing了解更多详情和Worker Threads and SwingWorker寻找可能的解决方案
  2. Swing 布局是惰性的,这是一件好事,它们不会更新,除非您告诉它们(或者某些其他事件需要它们更新,例如,容器大小被调整)。您可以通过在要更新的容器上调用 revalidaterepaint 来触发更新
  3. 创建类的新实例并不会神奇地连接您可能拥有的所有实例,这会使程序相当难以管理

关于java - 多线程扩展面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36278026/

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