0

这里可能是一个简单的问题,致力于学习使用挥杆制作 GUI 并取得轻微进展,但遇到了另一个减速带。我试图将 GUI 组件分组在不同的类中,以保持我的类很小并允许更灵活的 GUI,但是我构建了一个组件,如何将它调用到我的主类中。下面发布的是制作框架和组件的代码。我想我的调用方式存在问题,但我对如何调用它没有任何想法。任何想法都将不胜感激.....对于尝试将组件添加到frmMainMenu中的JFrame的问题不是很清楚,问题是当前运行时组件没有出现在Frame中

带有 JFrame 的主类

public class frmMainMenu {
    public static void main(String main[]){
        //Create Frame
        JFrame frmMainMenu = new JFrame();

        //Define Layout Manager
        GridBagLayout gridBag = new GridBagLayout();
        GridBagConstraints c = new GridBagConstraints();
        frmMainMenu.setLayout(gridBag);

        //Add Components

        //Create Left Container
        c.fill = GridBagConstraints.VERTICAL;
        c.weighty = 1;
        c.gridx = 0;
        c.gridy = 1;
        c.ipadx = 30;

        frmMainMenu.add(new comLeftToolBar(),c);

        frmMainMenu.setExtendedState(JFrame.MAXIMIZED_BOTH);

        frmMainMenu.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        //Display Frame
        frmMainMenu.setVisible(true);
    }
}

组件代码

public class comLeftToolBar extends JPanel{
    public comLeftToolBar() {

    JPanel comLeftContainer = new JPanel();
    GridBagLayout leftGridBag = new GridBagLayout();
    comLeftContainer.setLayout(leftGridBag);
    GridBagConstraints b = new GridBagConstraints();

    JToolBar comLeftToolBar = new JToolBar(JToolBar.VERTICAL);
    b.gridx = 0;
    b.gridy = 0;
    b.ipady = 50;

    JButton comNavButton = new JButton();
    JButton comProButton = new JButton();

    comLeftToolBar.add(comNavButton);
    comLeftToolBar.add(comProButton);

    comLeftContainer.add(comLeftToolBar,b);
    comLeftContainer.setBorder(BorderFactory.createLineBorder(Color.black));
    }
}
4

1 回答 1

1

问题是当前运行时组件没有出现在框架中

你的班级是一个小组。但随后您创建另一个面板 (comLeftContainer) 并将组件添加到此面板。但是您没有向 ComLeftToolBar面板添加任何组件,因此它保持为空。

对于一个简单的解决方案,您可以在类的底部使用:

add( comLeftContainer );

当然,这不是最好的解决方案。这将为您提供以下结构:

  • 面板
    • 面板
      • 工具栏
        • 按钮
        • 按钮

没有必要有这么复杂的结构。工具栏是直接添加到框架的组件。

如果您想创建一个可以添加到框架的类,请查看有关如何使用工具栏的 Swing 教程以获得更好的结构。

于 2013-06-20T03:29:03.267 回答