【问题标题】:Java Simple Question about working with JPanels关于使用 JPanels 的 Java 简单问题
【发布时间】:2011-01-24 14:53:00
【问题描述】:

这里只是一个简单的问题。我有一个程序,我需要在其中创建许多 JPanel,然后每个 JPanel 将包含一些对象(通常是 JLabels)。

每次创建新的 JPanel 时我都必须执行一些操作,我想知道我执行这些操作的顺序是否有任何影响,或者是否有标准做法。

我做的操作如下:

声明 JPanel:JPanel panel = new JPanel(...)

声明 JLabel:JLabel laberl = new JLabel...

将 JPanel 添加到其他内容窗格:frame.getContentPane().add(panel)

设置 JPanel 的边界:panel.setBounds(...)

将 JLabel 添加到 JPanel:panel.add(label)

【问题讨论】:

    标签: java user-interface jpanel


    【解决方案1】:

    通常顺序并不重要,只要您将所有组件添加到面板,并且面板是在“使框架可见”之前添加到内容窗格中的。

    标准做法是使用布局管理器,因此无需设置您添加到内容窗格的面板的边界。

    【讨论】:

      【解决方案2】:

      顺序无关紧要。但是,在创建并add 完成所有内容之后,您需要在面板上调用revalidate()(或在其父窗口上调用pack()),以便布局管理器(我假设您正在使用一个!)将组件排列为他们应该是。

      【讨论】:

        【解决方案3】:

        有一个方法 createPanel() 可以返回面板并添加了所有子面板。

        Panel p = createPanel();
        p.setBounds(...); // if you must
        frame.getContentPane().add(p);
        

        然后

        Panel createPanel() {
          Panel p = new Panel();
          Label l = new Label("Heading");
          p.add(l);
          return p;
        }
        

        构造和添加项的顺序并不重要,除了添加子项时,您应该按照您希望它们在面板中的顺序add它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-21
          • 1970-01-01
          • 1970-01-01
          • 2023-03-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多