使用NetBeans GUI构建器使用Java MVC方法进行编程

我的任务是创建一个GUI,它基本上需要一些用户输入,并对正在运行程序的机器可访问的各种驱动器上进行一些文件夹/文件操作。 在设计这个GUI时,我开始意识到MVC会让我的生活变得更轻松,而其他任何人决定修改代码,但我无法真正看到如何通过NetBeans实现这一点。

我已经对这个主题进行了一些阅读,我无法真正看到关于是否可以在NetBeans上完成这一切的明确答案。 当然,如果我以编程方式构建GUI,它可以完成,但这有点违背了我选择使用NetBeans的目的。

Netbeans可以做到这一点。

要实现的关键是尽管所有基本的Swing组件都是MVC,但大多数情况下你不会以这种方式与它们进行交互。 一个简单的文本字段有内部模型,但该模型不是您的模型,文本字段更原始。

您的模型处理更高级别的事件(按钮操作和不执行操作),而不是按下按钮,箭头移动和鼠标单击。

因此,对于高级MVC,通信的主要机制是通过PropertyChangeListeners。 构建应用程序的基本任务是将各种数据元素的PCL与其GUI组件连接在一起。

例如,一个简单的例子是你有一个项目列表。 该列表通过JTable在屏幕上呈现,该表位于JPanel上。

你的列表有它自己的模型,即它不仅仅是一个Java列表。 它不是List,因为标准Java列表不支持PCL通知。 但是你的模型显然会包含这样的List。

现在,接下来的问题是如何连接JTable以与List模型相关联。

一,您可以将JTable子类化并将其绑定到您的模型。 或者,更简单地说,您使用JTable作为基元,并让封闭的JPanel管理模型和JTable之间的交互。

这意味着让您的JPanel实现PropertyChangeListener,然后,在连接所有内容时,您执行以下操作:

ListModel myModel = new ListModel(); ListPanel myPanel = new ListPanel(); myModel.addPropertyChangeListener(myPanel); 

现在,每当更改ListModel时,都会通知ListPanel。

在ListPanel上你可以有类似的东西:

 @Override public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName().equals(ListModel.CHANGED)) { ListModel model = (ListModel) evt.getSource(); DefaultTableModel tm = (DefaultTableModel) listTable.getModel(); tm.setRowCount(0); for (String s : model.getList()) { tm.addRow(new Object[]{s}); } } } 

现在,您可以看到这只是重新加载整个表模型,但您可以根据需要将属性更改为细粒度。 您还可以看到,如果这是其他模型(如Person或其他),您可以在面板上填充单个文本字段和诸如此类的东西。

这是一个非常简单的GUI,但它显示了所有这些连接在一起的基本原理。 我认为在Swing示例中丢失了一点,这对于一个面板屏幕很有用,但是当你开始添加其他视图时根本不进行缩放。

你的JPanels基本上都是VC的组合,因为你的GUI会增加复杂性,你可以将这些事情考虑在内,但它对于合理数量的屏幕等很有效。

Netbeans可以通过两种方式帮助您利用其代码库:GUI Builder(1)和NB Platform(2)。

(1)Netbeans有一段时间是Java世界中最好的拖放式GUI构建器之一,代号为Matisse 。

也就是说,自从我使用它以来已经很长时间了 – 我从来没有真正喜欢生成的代码,它不是很容易理解(当然这不是自动生成代码的目的)。 对于更复杂的用户界面,我们手工编写了布局,即使不是最愉快的,也可以忍受工作。 对于简单的UI,我会再次尝试使用GUI Builder,对于具有大量有线逻辑的复杂UI,我可能仍会手工编写它。

要了解GUI Builder的工作原理,请查看众多教程video中的一个,例如:

  • NetBeans GUI Builder:添加组件

(2)Netbeans平台是Netbeans,RCP是Eclipse的。 为IDE开发的丰富组件,可以重复使用。 我简要地研究了NB平台 ,如果项目没有改变过程,我们就会使用它。 也许这个问题可以在这方面有所了解:使用哪个富客户端平台? 。


关于MVC。 JSR 296是一个通用的Swing应用程序框架,看起来有点前景,但在2011年被撤销 。 这并没有阻止人们分叉并开展工作,因为该项目显示: 更好的Swing应用程序框架 ,在2012年中期发布。即使您不使用这样的框架,也请不要将所有代码放在一个类中 (正如你在评论中提到的那样),但创建一个简单的模型/控制器并保持UI组件分离。 对于一个简单的应用程序来说,它并不需要花哨,最小的MVC-ish 分离关注点就足够了。

我也遇到了这个问题,我找到了一个链接,它提供了一个很好的示例,说明如何使用NetBeans GUI构建器从视图中分离控制器。

这是链接 。