Java如何让JComponent根据帧宽

时间:2017-10-16 11:36:44

标签: java resize gridbaglayout jcomponent

所以我的计算器程序看起来不错,除非我调整它的大小。然后事情就完全没了。现在我正在使用GridBagLayout来组织我的按钮(在给定多个按钮的情况下,最好使用GridBag来处理这种情况)。我将preferredSize设置为我想要的启动按钮大小。如何在窗口调整大小时让按钮改变大小?

enter image description here

这是我将应用程序调整得更小后会发生的事情。 当我把它做得更大时,一切都保持不变,我在两边都有灰色的空虚来弥补空间,而不是放大按钮。

对于我的按钮尺寸,我正在使用new Dimension(80, 55) 然后将preferredSize设置为该维度。 对于内存按钮和jlabels,我计算了一些数学运算,使其与整个按钮一样宽。

请注意我还在学习java,以及swing库。 结束注释

更新我在设置首选尺寸时尝试设置最小和最大尺寸但仍然没有 END UPDATE

更新2 我尝试将主面板的尺寸设置为与启动时的应用尺寸相匹配,但不起作用 END UPDATE

编辑2 我的层次结构如下:

  FRAME
    MAINPANEL  - Contains all three panels
      TOPPANEL - Contains the display
      MIDDLEPANEL - Contains memory buttons
      BOTTOMPANEL - Contains calculator buttons

END EDIT 2

1 个答案:

答案 0 :(得分:0)

我建议使用Oracle的TableLayout(你可以在那里下载),因为它更舒服。当然也可以使用GridBagLayout,但特别是当你是新手时,TableLayout更容易理解和配置。

Oracle TableLayout

double size[][] =
        {{0.25, 0.25, 0.25, 0.25},  //Horizontal
         {50, TableLayout.FILL, 40, 40, 40}};  //Vertical

frame.setLayout (new TableLayout(size));

它基本上是一个分为行和列的网格。因此,每个单元具有id,例如“0,0”。 高度和宽度可通过像素,百分比和Layout.FILL进行调整,它使用可用空间。如果您使用多个Layout.FILL,它将分隔它们之间的可用空间。

要添加按钮或其他元素,您需要知道单元格坐标,如果它大于一个单元格,您可以添加一个结束单元格,这样您就可以使用整个可用位置。

// Add buttons
    frame.add (button[0], "1, 1, 4, 1"); // Top
    frame.add (button[1], "1, 4, 4, 4"); // Bottom
    frame.add (button[2], "1, 3      "); // Left
    frame.add (button[3], "4, 3      "); // Right
    frame.add (button[4], "3, 3, c, c"); // Center
    frame.add (button[5], "3, 3, 3, 4"); // Overlap

这里有一些有用的链接:

http://www.oracle.com/technetwork/java/tablelayout-141489.html http://www.clearthought.info/sun/products/jfc/tsc/articles/tablelayout/Simple.html http://www.clearthought.info/sun/products/jfc/tsc/articles/tablelayout/Preferred.html