为什么我的GUI没有加载到构造函数上?

时间:2012-09-10 00:09:31

标签: java swing user-interface layout-manager

我有一个主类,在某些点上调用另一个类,使用如下构造函数。

构造函数创建GUI,我认为应该显示它,但它不会。为什么会这样?

public ModPackManager(){
    System.out.println("New modpackmanager");
    setUndecorated(true);
    setBounds(100, 100, 350, 87);
    getContentPane().setLayout(new BorderLayout());
    contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
    getContentPane().add(contentPanel, BorderLayout.CENTER);
    contentPanel.setLayout(null);
    {
        JLabel lblDownloadingModPack = new JLabel("Downloading and installing modpack, please wait...");
        lblDownloadingModPack.setHorizontalAlignment(SwingConstants.CENTER);
        lblDownloadingModPack.setBounds(10, 11, 330, 14);
        contentPanel.add(lblDownloadingModPack);
    }

    progressBar = new JProgressBar();
    progressBar.setBounds(10, 48, 330, 24);
    contentPanel.add(progressBar);

    label = new JLabel("0%");
    label.setHorizontalAlignment(SwingConstants.CENTER);
    label.setBounds(10, 29, 330, 14);
    contentPanel.add(label);
    try {
        installMods(getSelectedModPack());
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

3 个答案:

答案 0 :(得分:1)

  

为什么会这样?

尝试使用setBounds(..)而不是使用布局(使用填充和边框)。

答案 1 :(得分:0)

你永远不会展示任何东西,你只需要设置它。

虽然还不完全清楚你正在做什么,或者你正在使用什么类,如果它是JFrame

pack();
setVisible(true);

您可能希望在开发过程中注释掉setUndecorated(true) - 它可能会让事情无法查看/找到。为了避免窗口管理器调整大小,可能是最小的:

setMinimumSize(new Dimension(350, 200));

我不确定标签周围的虚假块是什么。

答案 2 :(得分:0)

假设ModPackManager是一个JFrame,您应该能够通过使用:

使其可见
setVisible(true);

只需在构造函数中的其他代码之后调用它。让我们知道它是怎么回事。