java - 使用 Grix、gridy 删除 JTextField
问题描述
我想知道是否可以使用 GridBagLayout 删除 JTextField 并像这样删除。
PANEL.remove(gridx.5, gridy.5)
---<这可能吗?
或者我怎样才能用这种逻辑删除。
解决方案
不,没有方法可以做到这一点,您需要自己编写。
- 该类
Container
有一个方法getLayout()
。这将允许您获取GridBagLayout
面板的实例。 - 该类
Container
也有一个方法getComponents()
因此,一旦您获得了数组中的所有组件,您就可以遍历该数组。对于每个组件,您将:
- 使用的
getConstraints()
方法GridBagLayout
。 - 然后检查对象的
gridx
andgridy
值GridBagConstraints
以查看组件在哪个 clumn/row 中。 - 如果组件符合您的标准,请从面板中删除它。
循环完成后,您revalidate()
在面板上调用。
编辑:
您需要在代码中的某处将布局管理器设置为 GridBagLayout。然后使用 GridBagConstraints 将组件添加到面板。
然后将来当您想从面板中删除组件时,您需要参考:
- 您将组件添加到的 JPanel
- 上面面板的 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 条件以访问这些参数。
推荐阅读
- spring - Web(会话)和 REST API 上的 Apache Wicket 和 Keycloak
- bash - 多个站点 FTP 下载,Bash 脚本中的多个变量 - 函数、循环还是其他?
- icecast - 如何使用 Liquidsoap 将单个视频流式传输到 Icecast 服务器
- python - 如何创建一个字典,允许用户输入中的多个键并打印出组合在一个字符串中的键值?
- python - Beautiful Soap 只能在没有无头模式的情况下工作?
- android - 错误消息“Android Gradle 插件需要 Java 11 才能运行。您当前使用的是 Java 1.8”
- python - python中非常大的数字的舍入错误
- webstorm - 如何在 JetBrains WebStorm 中手动更改侧边栏高度和选项卡高度
- tree - 树遍历。一般树的前序和后序,仅适用于二叉树?
- jenkins - 使用 Jenkins 持续交付:作为手动步骤部署到生产环境