首页 > 解决方案 > 从其他类向 JFrame 添加元素

问题描述

我在一个JFrame创作中有两个课程:

public class Window extends JFrame {

    public void createWindow() throws IOException {
        setTitle(GeneralValues.PROGRAM_NAME);
        setSize(1100, 600);
        setResizable(false);
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        setLayout(null);
        setVisible(true); 
    }
}

在第二个我有一个JLabel

public class InitialConfiguration {

    Window w = new Window();

    public void main() {
        JLabel blauncherIcon = new JLabel();
        blauncherIcon.setBounds(100, 100, 100, 100);
        blauncherIcon.setOpaque(true);
        blauncherIcon.setText("Text");

        w.add(blauncherIcon);
    }
}

我的主要方法:

public class Main {

    Window w = new Window();
    InitialConfiguration ic = new InitialConfiguration();

    public static void main(String[] args) {
    
         w.createWindow();
         ic.main();
    
    }

}

我想将类中的标签添加到InitialConfiguration类中的框架中,Window但不幸的是,这段代码创建了一个框架,但没有添加InitialConfiguration类中的标签。可以做到吗?

标签: javaswingjframe

解决方案


您的问题是,您的Window. 您InitialConfiguration有一个成员变量Window,标签被添加到该变量中。但这与Window您在Main课堂上的实例不同。

所以总而言之,您创建并显示窗口,但从不显示您实际添加标签的第二个窗口。

所以总的来说,如果你真的想以这种方式保持你的结构(我建议不要这样做,但你可能有你的理由),将正确的Window实例作为方法参数传递应该可以解决它。

public class InitialConfiguration {

    // Removed second Window here
  
    public void main(Window w) { // rename this method please
        JLabel blauncherIcon = new JLabel();
        blauncherIcon.setBounds(100, 100, 100, 100); // use layout managers
        blauncherIcon.setOpaque(true);
        blauncherIcon.setText("Text");
        w.add(blauncherIcon);
    }
}

还有你的“主要”:

public class Main {

    Window w = new Window(); // rename the class Window please
    InitialConfiguration ic = new InitialConfiguration();

    public static void main(String[] args) {
    
         w.createWindow();
         ic.main(w);
    }
}

推荐阅读