繁体   English   中英

摆动组件未在预期时显示

[英]Swing components not showing when expected

下面的类的目的是在每个JTabbedPane选项卡中创建一个带有AppletJFrame 方法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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM