1

我有一个主类,它在某些时候调用另一个类,构造函数如下。

构造函数创建了 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();
    }
}
4

3 回答 3

1

为什么会这样?

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

于 2012-09-10T01:51:46.610 回答
0

假设 ModPackManager 是一个 JFrame,您应该能够通过以下方式使其可见:

setVisible(true);

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

于 2012-09-10T00:18:46.797 回答
0

你从不显示任何东西,你只是设置它。

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

pack();
setVisible(true);

你可能想在开发过程中注释掉setUndecorated(true)——这可能会使事情变得无法看到/找到。为了避免窗口管理器调整大小,也许至少:

setMinimumSize(new Dimension(350, 200));

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

于 2012-09-10T00:11:22.727 回答