【发布时间】:2020-10-27 07:34:19
【问题描述】:
import java.awt.*;
import javax.swing.*;
public class GBLClumpingExample extends JFrame{
GBLClumpingExample(){
GridBagLayout g = new GridBagLayout();
GridBagConstraints gv = new GridBagConstraints();
GridBagLayout b = new GridBagLayout();
GridBagConstraints gc = new GridBagConstraints();
setVisible(true);
setSize(720,720);
setLayout(g);
JPanel p = new JPanel();
p.setLayout(b);
gv.fill = GridBagConstraints.BOTH;
add(p,gv);
Label l1 = new Label("Label 1");
Label l2 = new Label("Label 2");
Label l3 = new Label("Label 3");
Label l4 = new Label("Label 4");
Label l5 = new Label("Label 5");
gc.weightx =1.0;
gc.weighty = 1.0;
gc.gridx= 1;
gc.gridy= 1;
gc.anchor = GridBagConstraints.PAGE_START;
gc.gridx= -1;
gc.gridy= 0;
p.add(l1,gc);
gc.anchor = GridBagConstraints.SOUTH;
p.add(l2,gc);
gc.anchor = GridBagConstraints.EAST;
p.add(l3,gc);
gc.anchor = GridBagConstraints.WEST;
p.add(l4,gc);
gc.anchor = GridBagConstraints.CENTER;
p.add(l5,gc);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args){
GBLClumpingExample e = new GBLClumpingExample();
}
}
我尝试使用GridBagLayout,但它可能无法正常工作。
这是我的代码,我不知道有什么问题,但 GridBagConstraints 的锚约束不起作用,它们都只是聚集在一起。
【问题讨论】:
-
anchor会将组件限制在单元格内的该位置,但单元格将处理为组件的首选大小,因此您可能没有“看到”结果 - 因为@987654328 @ 不会扩展以填充框架 -
BTW 1) 举个例子better name than
example。对于所有这样的短代码,我只有一个包,每个人和他的狗都想调用那里的示例代码example。使其更具体,例如GBLClumpingExample。 2) 在提供提示的同时:请学习常见的 Java 命名法(命名约定 - 例如EachWordUpperCaseClass、firstWordLowerCaseMethod()、firstWordLowerCaseAttribute,除非它是UPPER_CASE_CONSTANT)并始终如一地使用它。 .. -
.. 3)
Label l1 = new Label("Label 1");应该是JLabel l1 = new JLabel("Label 1");(其他的等等)- 不要混合 Swing 和 AWT 组件。 -
只有三个有用的锚GridBagConstraints; GridBagConstraints.LINE_START、GridBagConstraints.CENTER 和 GridBagConstraints.LINE_END。您必须使用 gridx 和 gridy 参数在页面上定位 Swing 组件。此外,组织您的代码,以便对每个 Swing 组件的方法调用进行分组。它使人们更容易理解您的代码。这是 Oracle 的教程,如何使用 GridBag 布局。 docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html
-
@AndrewThompson
-1forgridx与GridBagConstraints.RELATIVE相同,这意味着将添加的组件放置在先前添加的组件的右侧。它甚至是默认值。当然,最好使用命名常量来避免这种混淆。
标签: java swing layout-manager gridbaglayout