首页 > 解决方案 > 使用 Grix、gridy 删除 JTextField

问题描述

我想知道是否可以使用 GridBagLayout 删除 JTextField 并像这样删除。

PANEL.remove(gridx.5, gridy.5)---<这可能吗?

或者我怎样才能用这种逻辑删除。

标签: javaeclipseswing

解决方案


不,没有方法可以做到这一点,您需要自己编写。

  1. 该类Container有一个方法getLayout()。这将允许您获取GridBagLayout面板的实例。
  2. 该类Container也有一个方法getComponents()

因此,一旦您获得了数组中的所有组件,您就可以遍历该数组。对于每个组件,您将:

  1. 使用的getConstraints()方法GridBagLayout
  2. 然后检查对象的 gridxandgridyGridBagConstraints以查看组件在哪个 clumn/row 中。
  3. 如果组件符合您的标准,请从面板中删除它。

循环完成后,您revalidate()在面板上调用。

编辑:

您需要在代码中的某处将布局管理器设置为 GridBagLayout。然后使用 GridBagConstraints 将组件添加到面板。

然后将来当您想从面板中删除组件时,您需要参考:

  1. 您将组件添加到的 JPanel
  2. 上面面板的 GridBagLayout

我给了你完成这个任务所需的方法。那么,您是否阅读了我建议您需要使用的方法的 API?

基本代码是:

GridBagLayout layout = (GridBagLayout)panel;
Component[] components = panel.getComponent();

for (each component in the array)
{
    GridBagConstraint gbc = layout.getConstraints( component )

    if (gbc.gridX == ?? && gbc.gridY = ??)
    {
        // remove the component from the panel
    }
}

panel.revalidate();

所以我建议你创建一个方法来传递你想要查找的组件的行和列。然后您可以更改 if 条件以访问这些参数。


推荐阅读