Java图形用户界面:文档对象模型

7

HTML有文档对象模型,JavaScript可以操纵/移动它。

当我在Swing中创建GUI时,模型似乎非常不同(我不知道模型的名称),因为我正在创建布局管理器,并将对象放置在其中。

我的问题是:是否有一种类似于DOM的方式来操纵Java GUIs?

[例如,我想能够删除/添加节点,移动子元素等...]

谢谢!


你的意思是像遍历组件层次结构一样吗? - Guillaume Polet
2
你将会遇到一些严重的失望和挫折。在Swing中,所有事情都比你在Javascript中习惯的要困难得多。你还会发现没有事件捕获/冒泡 - 它只会被分派到直接附加到事件源的监听器。 - Marko Topolnik
(HTML) ..不知道模型的名称。请参见 HTMLDocument - Andrew Thompson
@bestsss 我有点希望有人能来缓解我的话 :) 所以现在只缺少冒泡阶段。 - Marko Topolnik
@Marko,你也可以这样做,但我不知道它有什么用处。Swing(大多数情况下)是MVC指定的,如果需要,您可以完全浏览层次结构。对于一个HTML开发人员来说,Swing会有一些学习曲线。当我开始时,我已经有了WinAPI(甚至是not32),Delphi和纯AWT的经验,所以Swing有点更容易,但它仍然充满了一些奇怪的设计选择。 - bestsss
显示剩余3条评论
2个回答

7

对于Swing组件,一切都始于一组JFrame(您也可以拥有JWindow和JDialog,但通常至少有一个根框架)。最可能的是,您只关心该JFrame的contentPane(但是您也可以关心其ownedWindows等等...)。

因此,您可以按以下方式获取JFrame的内容窗格:

Container contentPane = frame.getContentPane();

从那里开始,您可以使用以下方式进入组件树:

Component[] children = contentPane.getComponents();

通过以下代码,您可以获取一个元素的父元素:

Container parent = child.getParent();

将组件添加到容器中的步骤如下:
container.add(someComponent);
container.validate();

从容器中移除组件的方法如下:

container.remove(someComponent);
container.validate();

要将组件从一个容器移动到另一个容器,只需从一个容器中删除它,然后添加到另一个容器中即可。
我不确定这是否回答了你的问题。如果您能提供具体示例,那会更容易理解。

我建议在所有情况下都使用revalidate() + repaint(),当然可能会有关于JComponent所需的讨论以及为什么不需要的问题,只是为了避免revalidate() + repaint() +1。 - mKorbel
您可以使用 Ctrl+Shift+F1 来获取如所示的清单。 - Catalina Island

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接