java - 简单的GUI Java布局问题

标签 java swing jframe jpanel layout-manager

我正在尝试执行以下操作,但不确定要使用哪种类型的 Java 布局。

我想要一个带有单个面板totalPanelJFrametotalPanel 应该包含两个面板,它们是我编写的自定义类,PanelA 和 PanelB。 PanelA 从高度 200 开始,PanelB 从高度 400 开始。当用户展开窗口或调整窗口大小时,只有 PanelB 应该增加高度增加,但两个面板的宽度都可以增加。

我该如何设置?我尝试使用 BorderLayout 但“北”的高度总是太小。我尝试使用 BoxLayout,但 PanelAPanelB 始终具有相同的高度。

最佳答案

考虑让totalPanel 使用BorderLayout。将PanelA 添加到BorderLayout.PAGE_START 位置,将PanelB 添加到BorderLayout.CENTER 位置。

有关布局管理器的更多信息,请查看教程:Lesson: Laying Out Components Within a Container

编辑:我看到您使用了 BorderLayout,它“不起作用”,但您没有显示代码。要对它不起作用的原因进行更多微调,请考虑向我们展示代码。

要使其正常工作,请考虑为您的 PanelX 类提供 getPreferredSize() 覆盖,这将有助于设置 JPanel 的初始大小。

例如:

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.*;

public class SimpleGuiLayout {

   private static void createAndShowGui() {
      JPanel totalPanel = new JPanel(new BorderLayout());

      totalPanel.add(new PanelX(800, 200, "Panel A"), BorderLayout.PAGE_START);
      totalPanel.add(new PanelX(800, 400, "Panel B"), BorderLayout.CENTER);
      JFrame frame = new JFrame("Simple Gui Layout");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(totalPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

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

class PanelX extends JPanel {
   private int prefW;
   private int prefH;

   public PanelX(int prefW, int prefH, String title) {
      this.prefW = prefW;
      this.prefH = prefH;
      setBorder(BorderFactory.createTitledBorder(title));
   }

   @Override
   public Dimension getPreferredSize() {
      return new Dimension(prefW, prefH);
   }
}

如果运行,它看起来像这样:
enter image description here

并且会适当调整大小。

关于java - 简单的GUI Java布局问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12522384/

相关文章:

java - 将文本插入 Quartz Schedule 上的 Swing 文本区域

Java Swing : How to bind a JLabel's text to a column in the selected row of a JTable?

Java 多边形调整大小

java - JFrame 不呈现任何组件

java - 如何在 Java 中从 ArrayList 中绘制对象

java - 为什么 Angular HttpClient 响应为空?

java - 接收类型 java.lang.CharSequence 无法解析。 Java 8 JDK 的错误消息

java - 如何对可运行类进行单元测试?

java - 我的应用程序显示错误的名称

使用 IntelliJ 的 Java MDI 应用程序