- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在处理一个现有项目,希望对其进行简化并使其可用。我有两个 GUI,我希望他们只从一个资源中获取它们的一些 GUI 代码。我的意思是 gui1.java
和 gui2.java
由它们的 GUI 代码组成。并且,一个用于它们的公共(public)部分。我们称它为 common.java
。使用 gui 选择部分,我可以满足选择哪个 gui(gui1 或 gui2)。我想用 JFrame
扩展 common.java
然后用 扩展
。此外,如果其中一个 GUI 有外部部分,我可以使用 if 条件添加外部部分(正如我所说,我可以确定选择了哪个 gui。)例如:gui1.java
和 gui2.java
common.java
protected void MovementStateControl() {
try {
URL url = new URL(NameofMyproject.GetWepIp() + "<MESSAGE><Command_No>4</Command_No></MESSAGE>");
URLConnection connection = url.openConnection();
Document doc = parseXML(connection.getInputStream());
NodeList Settings = doc.getElementsByTagName("SYSTEM_SETTINGS");
Node MovementSystem = Settings.item(0);
Element MovementElem = (Element) MovementSystem;
jLabel7.setText(MovementElem.getElementsByTagName("device_name").item(0).getTextContent());
SystemGuiSelect.DeviceName = MovementElem.getElementsByTagName("device_name").item(0).getTextContent();
NameofMyproject.signal_max_level = Integer.parseInt(MovementElem.getElementsByTagName("signal_max_val").item(0).getTextContent());
/* If gui1 is selected, the part should be done as well. Otherwise, just above part okay. */
if (gui1) {
NameofMyproject.signal_min_level = Integer.parseInt(MovementElem.getElementsByTagName("signal_min_val").item(0).getTextContent());
if (!"EXISTS".equals(MovementElem.getElementsByTagName("polarization_system").item(0).getTextContent())) {
jLabel24.setVisible(false);
LblPolAngle.setVisible(false);
lblPolTarget.setVisible(false);
jLabel13.setVisible(false);
jTextField3.setVisible(false);
jButton16.setVisible(false);
jButton8.setText("Tx-Xy");
jButton3.setVisible(false);
jButton4.setVisible(false);
jProgressBar3.setVisible(false);
jLabel36.setVisible(false);
jLabel37.setVisible(false);
jLabel5.setVisible(false);
jButton18.setVisible(false);
} else {
jLabel24.setVisible(true);
LblPolAngle.setVisible(true);
lblPolTarget.setVisible(true);
jLabel13.setVisible(true);
jTextField3.setVisible(true);
jButton16.setVisible(true);
jButton8.setText("Tx-Xy-Zu");
jButton3.setVisible(true);
jButton4.setVisible(true);
jProgressBar3.setVisible(true);
jLabel36.setVisible(true);
jLabel37.setVisible(true);
jLabel5.setVisible(true);
jButton18.setVisible(true);
}
}
} catch (Exception e) { }
}
这里的问题是我希望将通用的 GUI 部分放入 common.java
以消除代码重复,因为两个 GUI 相同的代码太多了。当然,因为 common.java
是父类(super class),所以它无法识别其子类的元素。 (无法识别 JLabel、JButton 等)即使它们的 thread
部分相同,我也无法从相同的来源提供它们。 GUI 是使用 NetBeans 创建的。顺便说一下,我的问题解决方案是为所有方法添加参数,但是方法有多少个参数呢? (也许我使用了 vargs)但是,我想知道是否有更有效的解决方案。
最佳答案
据我了解,您需要处理 2 个基本问题。首先是 UI View 与控制逻辑的分离,其次是增加 Swing 代码中的重用。我的解决方案是引入一个In Process Event Bus,用于 View 和控件之间的通信以及具有通用布局的Extract Components来自当前 UI 类的模式,以增加 Swing 代码中的重用。
你需要这个,因为你的观点会有所不同,但你的控制逻辑应该保持不变。您需要找到一种方法来告诉您的 UI device_name 已更改。因此,我建议使用事件总线 实现。有一些实现已经为您解决了 EventDispatchThread 处理。
由 Event Bus 分隔,您的 gui2.java 将仅对与其包含的视觉元素相关的事件使用react,并且 < em>gui1.java 具有所有当前已知的字段,将对所有事件使用react。您的 Controller 只是发布事件,而不知道它是被某人消费还是被丢弃。
我建议识别 UI 的公共(public)部分,例如标签组、文本字段等,它们在功能上属于彼此(例如,一个人的姓氏和名字)。将它们提取到扩展 JPanel 的单独类中,并在您需要的任何地方重复使用它们。
不要将这些片段直接注册到 EventBus 或至少注入(inject)它们应该响应的事件名称。否则,您不能在一个 JFrame 中使用同一组件的两个实例,因为它们会自动显示相同的值。
我希望这能提供一些关于从哪里开始重构以及朝着哪个方向发展的想法。
关于java - 使用一个来源的两个 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38502861/
我正在用 robocopy 编写一个 powershell 脚本来从列表中复制“完整的”unc/文件名路径。我遇到的问题是 robocopy 似乎在我的源路径末尾添加了一个 \。 我有一个 C:\te
我发现守护程序通过这些代码创建了一个容器 // NewBaseContainer creates a new container with its // basic configuration. fu
是否有所有潜在 map 源的列表?在示例页面上,可以浏览四种类型的 map 。外面还有什么? http://tombatossals.github.io/angular-leaflet-directi
是否有所有潜在 map 源的列表?在示例页面上,可以浏览四种类型的 map 。外面还有什么? http://tombatossals.github.io/angular-leaflet-directi
我们的网站比较多,第一次使用ElasticSearch不知道应该怎么配置ES: 我们想使用 ES 作为这些网站的唯一搜索引擎,我们是否应该为每个网站设置单独的 ES 实例? (我想这可能比一个 ES
我需要一些关于我对 UNI 项目的想法的建议。 我想知道是否可以将一个音频文件从不同的音频源分成不同的“流”。例如,将音频文件拆分为:引擎噪音、火车噪音、人声、并非始终存在的不同声音等。 我不一定需要
我想设置“公共(public)彩票”,每个人都可以看到选择是随机和公平的。如果我只需要一点,我会使用例如当天收盘道琼斯指数的 LSB。问题是,我需要 32 位。我需要一个来源: 每日可用 全世界都可以
来自 pickle 的 python 文档: Warning The pickle module is not secure. Only unpickle data you trust. 什么是 pi
我试图安排一个 liquidsoap 流媒体源在未来的特定日期和时间播放。我相信这可以使用 Liquidsoap switch 命令来完成,但我无法理解此处描述的文档:http://liquidsoa
对于Shiny应用程序,我希望能够播放在 session 本身期间生成的音频文件。 如果它是我要上传的音频文件,我将使用 tags$audio(src = "www/name.wav", ty
我想更改我的 OpenGL 来源。图片会说明: 现在是这样的: 这就是我想要的: 当前代码 gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL
我正在尝试让 Stripe 运行起来,我几乎已经完成了,但有一件令人困惑的事情。 source: 'tok_visa' 部分。看起来它可以是“tok_mastercard”、“bank_account
我已经下载了 primefaces 源代码,看看是否可以从中学习。该 jar 包含一堆使用编写器来处理渲染等的 java 类。我期待找到一些 .xhtml 文件 ... and etc etc
如果我查看页面源代码,我会看到 styling += 'ul#topnav a.tabHeader5'; styling += '{'
我正在尝试根据显示器的大小更改背景图像。它不在服务器上运行。您可以在 https://github.com/Umpalompa/Umpalompa.github.io 找到我的所有代码. 我尝试同时使
从here的最底部开始.有一个 URL 生成器,我可以使用引荐来源网址在 Google Play 上生成指向我的应用程序的链接。我如何从谷歌分析中提取该 Activity 来源?我一直在谷歌上搜索,但
我用 Google Weather API 制作了一个插件,目前我正在从 Google 的 API 中提取图像。对于晴天,我正在拉 http://www.google.com//ig/images/w
是否可以通过环境变量为 @CrossOrigin 注释指定来源?我想这样做,以便我可以将相同的代码库用于 uat/staging/production。我希望我的 uat/staging 环境可以通过
我需要等待我的 JavaScript 中的文档准备就绪,才能在正文底部插入一个 div。 我想: 使此 JavaScript 文件尽可能小(如果可能,将其编译到 < 1kb) 在闭包中内联提供文档就绪
我正在开发电子邮件服务并想连接到谷歌帐户,是否可以将我的本地主机用作授权的 JavaScript 来源? 最佳答案 第 1 步:启用 Google+ API http://localhost:4567
我是一名优秀的程序员,十分优秀!