Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javagui:文档对象模型_Java_Swing_Dom_Defaultstyleddocument - Fatal编程技术网

javagui:文档对象模型

javagui:文档对象模型,java,swing,dom,defaultstyleddocument,Java,Swing,Dom,Defaultstyleddocument,HTML有一个文档对象模型,Javascript可以对其进行操作/移动 当我在Swing中创建GUI时,模型看起来非常不同(我不知道模型的名称),因为我正在创建布局管理器,并在其中粘贴对象 我的问题是:是否有办法以类似DOM的方式操纵Java GUI [例如,我希望能够删除/添加节点、移动孩子等…] 谢谢 对于Swing组件,一切都从一组JFrame开始(也可以有JWindow和JDialog,但通常至少有一个根框架)。最有可能的是,您只关心JFrame的contentPane(但您也可以关心它

HTML有一个文档对象模型,Javascript可以对其进行操作/移动

当我在Swing中创建GUI时,模型看起来非常不同(我不知道模型的名称),因为我正在创建布局管理器,并在其中粘贴对象

我的问题是:是否有办法以类似DOM的方式操纵Java GUI

[例如,我希望能够删除/添加节点、移动孩子等…]


谢谢

对于Swing组件,一切都从一组JFrame开始(也可以有JWindow和JDialog,但通常至少有一个根框架)。最有可能的是,您只关心JFrame的contentPane(但您也可以关心它自己的Windows等)

因此,您可以从JFrame获得如下内容窗格:

Container contentPane = frame.getContentPane();
从这里开始,您可以开始沿着组件树,使用:

Component[] children = contentPane.getComponents();
从子级,您可以通过以下方式获取其父级:

Container parent = child.getParent();
要将组件添加到容器中,请执行以下操作:

container.add(someComponent);
container.validate();
container.remove(someComponent);
container.validate();
要从容器中删除组件,请执行以下操作:

container.add(someComponent);
container.validate();
container.remove(someComponent);
container.validate();
要将组件从一个容器移动到另一个容器,只需将其从一个容器中移除并添加到另一个容器中即可


我不确定这是否回答了你的问题。如果你能发布你正在尝试做的事情的真实例子,那就容易多了。

我不确定这是否能解决你的问题,但确实有。

你的意思是说,像浏览组件的层次结构一样?你会感到极度失望和沮丧。Swing中的每件事都比Javascript中习惯的要困难得多。您还将发现没有事件捕获/冒泡——它只被分派到直接连接到事件源的侦听器。”(HTML)…不知道模型的名称“请看,这不是与在javascript中添加节点相同吗?@Marko:lol,这是我的想法。大约两天前,我创建了一个基本的JFrame,获得了它的Graphics2D环境,并开始为它绘图——但我希望其他人已经解决了这个问题。:-)我建议不要使用revalidate()+repaint(),在任何情况下,都要确保可以讨论JComponent需要什么以及为什么不需要,只是为了避免这种revalidate()+repaint()+1,您可以使用
Ctrl+Shift+F1
获得一个列表,如图所示。