【问题标题】:2 Layouts for JPanel?2 JPanel 的布局?
【发布时间】:2015-03-29 16:50:59
【问题描述】:

我正在为一个程序制作一个 gui,它使用JPanels 来做这件事。我有 2 个JPanels。第一个包含JLabelJTextField。第二个包含JLabelJTextField。我需要屏幕底部的两个,一个在另一个之上。我尝试了BorderLayout.SOUTH,但其中一个Panels 覆盖了另一个。如果我使用BoxLayout.Y_AXIS,那么它们不会居中或位于底部。我该怎么做?

编辑:我修好了。将面板添加到框架时忘记设置边框布局。所以我修好了。

【问题讨论】:

  • 以后,请出示与您的问题相关的相关代码。这将为我们省去很多悲伤和浪费时间。

标签: java swing jpanel border-layout boxlayout


【解决方案1】:

解决方案:嵌套 JPanel

创建第三个 JPanel,它使用面向 BoxLayout.PAGE_AXIS 的 BoxLayout,将您的 2 个 JPanel 添加到此,然后将第三个 JPanel 添加到主 GUI(希望使用 BorderLayout)到 BorderLayout.PAGE_END 位置。


比如我的Minimal, Complete, and Verifiable Example Program:

import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.*;

public class LayoutExample extends JPanel {
   public LayoutExample() {
      JPanel panel1 = new JPanel();
      panel1.add(new JLabel("Label 1"));
      panel1.add(new JTextField(10));
      panel1.setBorder(BorderFactory.createTitledBorder("Panel 1"));

      JPanel panel2 = new JPanel();
      panel2.add(new JLabel("Label 2"));
      panel2.add(new JTextField(10));
      panel2.setBorder(BorderFactory.createTitledBorder("Panel 2"));

      JPanel boxLayoutUsingPanel = new JPanel();
      boxLayoutUsingPanel.setLayout(new BoxLayout(boxLayoutUsingPanel, BoxLayout.PAGE_AXIS));
      boxLayoutUsingPanel.add(panel1);
      boxLayoutUsingPanel.add(panel2);
      boxLayoutUsingPanel.setBorder(BorderFactory.createTitledBorder("BoxLayout Panel"));

      setLayout(new BorderLayout());
      setBorder(BorderFactory.createTitledBorder("Main BorderLayout GUI"));
      add(Box.createRigidArea(new Dimension(400, 200)), BorderLayout.CENTER);
      add(boxLayoutUsingPanel, BorderLayout.PAGE_END);
   }

   private static void createAndShowGui() {
      LayoutExample mainPanel = new LayoutExample();

      JFrame frame = new JFrame("LayoutExample");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

如果仍然卡住,请创建并发布您的Minimal, Complete, and Verifiable Example Program

【讨论】:

  • 它部分工作。它使文本字段不是全屏的,但它们仍然不在页面底部。
  • @JoelButenhoff:查看并运行我上面的示例代码。如果这不能解决问题,请编辑您的问题并发布您自己的Minimal, Complete, and Verifiable Example Program
猜你喜欢
  • 2020-06-17
  • 2012-08-01
  • 2016-07-31
  • 2014-04-30
  • 1970-01-01
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多