[英]Swing components not showing when expected
下面的类的目的是在每个JTabbedPane
选项卡中创建一个带有Applet
的JFrame
。 方法loadPanel()
返回一个Box
组件(假定在加载Applet
时显示的“加载屏幕”),而loadGame()
方法加载并返回一个Applet
。
但是,当调用load()
时,将显示JFrame
但是直到Applet
加载后才会显示JTabbedPane
。 一直在绞尽脑汁,不知道这里出了什么问题,欢迎提出任何建议。
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
@SuppressWarnings("serial")
public class Loaders extends JFrame {
int dimension;
int osClients;
int rs3Clients;
public Loaders(int osClients, int rs3Clients) {
this.osClients = osClients;
this.rs3Clients = rs3Clients;
this.dimension = (int) Math.sqrt(osClients + rs3Clients);
}
public void load() {
Loader[] os = new Loader[osClients];
Loader[] rs3 = new Loader[rs3Clients];
setTitle("DENCH CLIENTS");
setSize(768, 528);
setResizable(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBackground(new Color(0x2B2B2B));
JTabbedPane tabs = new JTabbedPane();
for(int i = 0; i < osClients; i++) {
os[i] = new Loader(Game.OSRS, i+1);
tabs.add("OS " + i, os[i].loadPanel());
}
for(int i = 0; i < rs3Clients; i++) {
rs3[i] = new Loader(Game.RS3, i+1);
tabs.add("RS3 " + i, rs3[i].loadPanel());
}
add(tabs);
tabs.setVisible(true);
setVisible(true);
for(Loader l : os) {
System.out.println(l.getWorld());
int index = tabs.indexOfTabComponent(l.getBox());
tabs.setComponentAt(index, l.loadGame());
}
for(Loader l : rs3) {
int index = tabs.indexOfTabComponent(l.getBox());
tabs.setComponentAt(index, l.loadGame());
}
}
}
setVisible
移至方法的结尾 不需要tab.setVisible(true)
由于您正在更新选项卡面板,因此建议在swing调度线程中调用它,如下所示:
SwingUtilities.invokeLater(new Runnable(){ @Override public void run() { for(Loader l : os) { System.out.println(l.getWorld()); int index = tabs.indexOfTabComponent(l.getBox()); tabs.setComponentAt(index, l.loadGame()); } for(Loader l : rs3) { int index = tabs.indexOfTabComponent(l.getBox()); tabs.setComponentAt(index, l.loadGame()); } } }); tabs.setVisible(true); setVisible(true); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.