我经常使用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.createHorizontalStrut(5); 组件spacer2 = Box.createHorizontalStrut(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); }}
同样,这只是您在线上找到的许多方式之一。希望这可以帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)