我正在尝试在JPanel
中分配实现Runnable
接口的JFrame
。我做了这个样本来解释我的想法。我想添加一个多线程面板,将一个文本显示为一个窗口,其中String
作为新实例的参数。该小组应该有独立的过程,所以我实现了Runnable
接口。但是当我尝试使用我的类的新实例创建一个新的实例o面板时,它不起作用。
我做错了什么?
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);
}
}
答案 0 :(得分:2)
revalidate
和repaint
来触发更新答案 1 :(得分:1)
缺少一些东西
非常重要 - 您不应更新AWT EventDispatcher线程以外的UI。使用Swing甚至可能导致死锁。 this post
您必须使用SwingUtilities更新Swing UI组件。
SwingUtilities.invokeLater(new Runnable(){
public void run(){
// update your UI components
}
});
下一条信息 - 如何创建多线程线程?您错过的是运行“运行”方法的切入点:
public class MyMultiThreadedType implements Runnable {
public void run() {
// this will run in parallel
}
public static void main(String[] args) {
MyMultiThreadedType mmt = new MyMultiThreadedType ();
Thread t = new Thread(mmt);
t.start(); // this will start a parallel thread
}
}