寻找用于GridBagLayout组件创建的通用方法

寻找用于GridBagLayout组件创建的通用方法,第1张

寻找用于GridBagLayout组件创建的通用方法

我经常使用GridBagLyout,但是像我之前的许多人一样,我很快发现它可能很冗长。网上有许多示例,说明用户如何编写实用程序方法和/或类来帮助他们生成GBL代码。我会告诉你我的工作。

1)首先,我创建2个枚举作为针对包装 填充
的GridBagConstraints字段。我更喜欢枚举与整数的类型检查,这也使我可以编写更简洁的代码(稍后将看到)。是的,我仍将较旧的“方向”值用于锚点。我永远无法完全适应的首选值

PAGE_START
等。使用您喜欢的任何东西。

Anchor.java:

软件包gbl;导入java.awt。*;/ ** *方便枚举,将所有可能的值都排除在外 * GridBagConstraints **锚点** 属性。 * /公共枚举锚{  NORTH(GridBagConstraints.NORTH),  SOUTH(GridBagConstraints.SOUTH),  EAST(GridBagConstraints.EAST),  WEST(GridBagConstraints.WEST),  东北(GridBagConstraints.NORTHEAST),  西北(GridBagConstraints.NORTHWEST),  东南(GridBagConstraints.SOUTHEAST),  西南(GridBagConstraints.SOUTHWEST),  CENTER(GridBagConstraints.CENTER);  私有int约束;  私人锚点(int gbConstraint)  {    约束= gbConstraint;  }  公共诠释getConstraint()  {    返回约束;  }}

Fill.java:

软件包gbl;导入java.awt。*;/ ** *方便枚举,将所有可能的值都排除在外 * GridBagConstraints **填充** 属性。 * /公共枚举{  NONE(GridBagConstraints.NONE),  水平(GridBagConstraints.HORIZONTAL),  垂直(GridBagConstraints.VERTICAL),  BOTH(GridBagConstraints.BOTH);  私有int约束;  私人填写(int gbConstraint)  {    约束= gbConstraint;  }  公共诠释getConstraint()  {    返回约束;  }}

2)然后,我创建了GridBagConstraints的子类,该子类允许我仅在需要它们时才“链接”属性,同时利用常见的默认值:

GBConstraints.java:

软件包gbl;导入java.awt。*;/ ** *便利类,简化了GridBagConstraints对象的创建。 * /公共类GBConstraints扩展了GridBagConstraints{  公共GBConstraints(int gridX,int gridY)  {    超();    this.gridx = gridX;    this.gridy = gridY;    this.gridwidth = 1;    this.gridheight = 1;    this.weightx = 0;    this.weighty = 0;    this.anchor = NORTHWEST; //旧的默认值为CENTER    this.fill = NONE;    this.insets =新的Insets(1,2,1,2); //旧的默认值为(0,0,0,0)    this.ipadx = 1; //旧的默认值为0    this.ipady = 1; //旧的默认值为0  }  公共GB约束锚(锚锚)  {    this.anchor = anchor.getConstraint();    返回这个  }  公共GB约束填充(填充)  {    this.fill = fill.getConstraint();    / *     *为方便起见,请适当设置权重,因为这些值是     *几乎总是与给定的Fill一起使用。来电者可以随时     *如果不需要这些默认值,请稍后调用weight(...)方法。      * /    开关(填充)    {      案例水平:        this.weightx = 1;        this.weighty = 0;        打破;      案例垂直:        this.weightx = 0;        this.weighty = 1;        打破;      案例:        this.weightx = 1;        this.weighty = 1;        打破;      默认:        this.weightx = 0;        this.weighty = 0;        打破;    }    返回这个  }  公共GBConstraints插入(int长度)  {    返回插图(长度,长度,长度,长度);  }  公共GBConstraints插入(int顶部,int左侧,int底部,int右侧)  {    this.insets =新的Insets(顶部,左侧,底部,右侧);    返回这个  }  公共GB约束ipad(int ipadX,int ipadY)  {    this.ipadx = ipadX;    this.ipady = ipadY;    返回这个  }  公共GB约束范围(int gridWidth,int gridHeight)  {    this.gridwidth = gridWidth;    this.gridheight = gridHeight;    返回这个  }  公共GBConstraints spanX(int gridWidth)  {    this.gridwidth = gridWidth;    返回这个  }  公共GB约束spanY(int gridHeight)  {    this.gridheight = gridHeight;    返回这个  }  公共GB约束权重(double weightX,double weightY)  {    this.weightx = weightX;    this.weighty = weightY;    返回这个  }  公共GB约束weightX(double weightX)  {    this.weightx = weightX;    返回这个  }  公共GB约束weightY(double weightY)  {    this.weighty = weightY;    返回这个  }}

3)放在一起,这是演示如何使用上述类的演示。这大大简化了IMHO的GridBagLayout的使用。旁注:我通常不会使用静态导入,但是在这种情况下我喜欢它。

演示:

软件包gbl;导入静态gbl.Anchor。*;导入静态gbl.Fill。*;导入java.awt。*;导入javax.swing。*;公共类GridBagDemo实现Runnable{  公共静态void main(String [] args)  {    SwingUtilities.invokeLater(new GridBagDemo());  }  公共无效run()  {    JLabel lblFirst =新的JLabel(“名字”);    JLabel lblLast =新的JLabel(“ Last Name”);    JLabel lblStreet =新的JLabel(“ Street”);    JLabel lblCity =新的JLabel(“ City”);    JLabel lblState =新的JLabel(“ State”);    JLabel lblZip =新的JLabel(“ ZIP”);    JLabel lblNotes =新的JLabel(“ Notes”);    JTextField txfFirst =新的JTextField(15);    JTextField txfLast =新的JTextField(20);    JTextField txfStreet =新的JTextField(40);    JTextField txfCity =新的JTextField(15);    JTextField txfState =新的JTextField(5);    JTextField txfZip =新的JTextField(10);    Jtextarea txaNotes =新的Jtextarea(5,50);    JScrollPane scrNotes =新的JScrollPane(txaNotes);    scrNotes.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_​​ALWAYS);    组件spacer1 = Box.createHorizo​​ntalStrut(5);    组件spacer2 = Box.createHorizo​​ntalStrut(5);    JPanel面板= new JPanel(new GridBagLayout());    panel.add(spacer1,new GBConstraints(0,0));    panel.add(lblFirst,新的GBConstraints(0,1));    panel.add(txfFirst,新的GBConstraints(1,1));    panel.add(lblLast,新的GBConstraints(2,1));    panel.add(txfLast,新的GBConstraints(3,1).spanX(3).fill(HORIZONTAL));    panel.add(lblStreet,新的GBConstraints(0,2));    panel.add(txfStreet,新的GBConstraints(1,2).spanX(5).fill(HORIZONTAL));    panel.add(lblCity,新的GBConstraints(0,3));    panel.add(txfCity,新的GBConstraints(1,3));    panel.add(lblState,新的GBConstraints(2,3).anchor(EAST));    panel.add(txfState,新的GBConstraints(3,3));    panel.add(lblZip,新的GBConstraints(4,3));    panel.add(txfZip,新的GBConstraints(5,3).fill(HORIZONTAL));    panel.add(lblNotes,新的GBConstraints(0,4));    panel.add(scrNotes,new GBConstraints(1,4).spanX(5).fill(BOTH));    panel.add(spacer2,new GBConstraints(0,5));    Jframe frame = new Jframe(“ Grid Bag Demo”);    frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);    frame.add(新的JScrollPane(panel),BorderLayout.CENTER);    frame.pack();    frame.setLocationRelativeTo(null);    frame.setVisible(true);  }}

同样,这只是您在线上找到的许多方式之一。希望这可以帮助。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5478417.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存