【问题标题】:Java GUI architecture for larger project大型项目的 Java GUI 架构
【发布时间】:2014-10-08 15:34:35
【问题描述】:

我想制作一个应用程序,它可以作为多个服务器的接口。 原因:在默认提供的 web iface 中(我们无法更改),我们遗漏了一些东西,很少有可以做得更好的东西,而且某些东西的自动化肯定会使工作变得更容易。

我有什么:几乎完成了与服务器应用程序的 Web 界面通信的类。

界面说明: 对于某种版本 0.1:用户名文本字段、选择服务器的单选按钮和一个“开始”按钮。然后是几个(4-12)个操作按钮来操作数据,2x 带有结果的文本区域,一个带有一些文本数据的标签 - 我可以管理这个。 然后我需要查看数据 - 将加载数据的网格 MxN,预期大小:7-15 列,通常 10 行或更少,但很少会超过 1k(甚至更多,但我不需要全部在这种情况下对用户可见)。

我需要什么:只是一个建议。 我希望从一个简单的版本开始(我已经在做这个了,但是我被困在太多的事情上——95% 的 cos 和 GUI 的绝对新手和 5% 的 cos 我是 java 新手)。 我检查了很多教程,但它们都很简单。


真正的问题:

1) 验证。在 MVC 控制器中应该处理所有用户操作 - 它是由视图的方法完成的,类似于 button.addActionListener(param); anotherButton.addActionListener(paramp; ...?

1b) 我已经看到所有这些都是通过一个(嵌套)类实现的,然后该类正在检查源代码或 smth - 可以吗?会有很多按钮等。

2) 如何实现数据网格,当我需要对 click / dbl click 进行操作时?

4) 第一行是标题,其余的应该是可滚动的 - 它应该在网格中还是外部(它自己的网格):

4a) 如何确保标题的大小(宽度)与数据中的相同(我不想设置直线大小)

4b) 到目前为止,我未能创建任何可滚动的内容,但我猜那是我的错。如何确保 header 将保持在一个位置,其余的可以滚动?

5) “数据更新”应该如何实现?我有JPanel,我从中删除了网格组件,然后我制作了一个新的并将数据添加到其中(很简单,但也许还有另一种方法)。第一个增强功能将是排序 - 使用与新内容相同的方式?


非常感谢您的回答,我知道这不是很具体,但我发现的例子太简单了。

我计划了很多改进,但那是在将来,我不介意多次返工 GUI/Controller,至少,我会练习,但我不想完成一部分代码并意识到我必须重写一半的控制器和 1/4 的视图才能使其成为可能。

注意:我计划在工作中使用它作为我的工具(如果一切顺利,我只需点击几下就可以完成 25-50% 的工作 :-) 所以我真的是这个意思)。

注意#2:我对编程并不陌生,但我从未创建过 GUI(这就是为什么我有带有 2 个项目和 3 个组件的菜单栏的 GUI,并且几乎完成了 web-iface 连接)。

注意#:3 可拖动的数据标题,选项卡式数据视图 - 这就是未来的计划 :-)

【问题讨论】:

  • 对不起,看起来很明显,但为了回应“我找到的所有教程都很简单”......你搜索过“高级 java swing 教程”
  • 我看到您有很多问题,作为提示,通常最好只通过 Post 提出一个问题,这样人们更容易实际阅读并最终回答。它还可以让您更轻松地确保问题清晰易懂。
  • @snickers10m:是的,有高级 GUI 示例等,但没有功能(或通过匿名侦听器实现的非常简单的功能)。我希望我的代码可读,这很快就会消失。
  • @leparlon:我知道如何要求诚实。我真正需要的是几句话,例如:1 - 是的,通常是用户,1b)您可以创建几个嵌套类来处理这个问题。 2)您可以定期实现网格并为整个网格+函数添加一个MouseEvent处理,该函数可以通过鼠标位置获取元素......类似的东西基本上我可以实现这个,但我不确定它是否不会以后给我带来很多麻烦。

标签: java swing user-interface architecture


【解决方案1】:
  1. 检查 Swing 中的 MVC here;使用nested classes 便于原型设计,并为未来的问题创建mcve;根据需要,可以将嵌套类提升为具有package-private 访问权限的单独类。

  2. 使用JTablerenderers 的享元实现非常适合按行和列组织数据。

  3. 第三项不存在,但如果您打算拖动列或对行进行排序,请“始终记住translate 单元格坐标”。

  4. 使用JScrollPane 使表头保持静止。

  5. 更新TableModel,监听视图会自动更新作为响应。

【讨论】:

    【解决方案2】:

    如果您不仅对事件/消息传递架构感兴趣,而且对处理鼠标/键盘输入、悬停检测、小部件、临时菜单、通过小部件对齐调整表单大小、拖放等感兴趣。我可以为您提供建议用有用的资源查看 this question 和我的回答。

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2012-04-28
      相关资源
      最近更新 更多