问题标签 [gui-design]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 从另一个嵌套窗口访问嵌套窗口的最佳方式
GUI 应用程序具有以下窗口层次结构:
父窗口高于子窗口。
每个子窗口都是父 wnd 类的受保护成员。
每个子窗口类都有一个指向其父窗口的引用/指针。
窗格是自定义控件占位符(视图)。
所有控件都是标准 MFC 控件。
SomeCCtrl1
的事件处理程序需要更改CCtrl2
(例如设置其文本)。实现这一目标的最佳方法是什么?从嵌套在窗口层次结构的另一个分支中的另一个窗口访问嵌套在窗口层次结构的一个分支中的窗口的最佳方法是什么?
我在这里发布两个解决方案。
解决方案 1
- 所有子对话框(控制容器)都有:
- 返回父对话框的公共吸气剂和
- 对其子控件执行某些操作的公共方法(因此隐藏子控件)
- 返回父对话框的公共吸气剂和
- 根窗口具有返回窗格的公共 getter
MainWnd.h:
左窗格.h:
右窗格.h:
LDlg1.h:
LDlg1.cpp:
RDlg2.h:
我在这里的情况与此问题中描述的情况类似:公共 getter ( GetMainWnd().GetRightPane().GetRDlg2()...
) 链用于访问所需的嵌套对象。CLDlg1 知道违反Demeter 定律的CRightPane 和 CRDlg2 。
这种情况可以通过将SetCtrl2Text(...)
方法移动到层次结构中的上层来避免,如下所述:
解决方案 2
在这种情况下CMainWnd
,包含在深度嵌套控件中执行操作的所有必要方法。
MainWnd.h:
MainWnd.cpp:
右窗格.h:
RightPane.cpp:
LDlg1.cpp:
RDlg2.h:
RDlg2.cpp:
这对其客户端隐藏了窗口层次结构,但这种方法:
- 使用对所有嵌套控件执行所有操作的公共方法使
CMainWnd
类过度拥挤;CMainWnd
充当所有客户行动的主配电板; - CMainWnd 和每个嵌套对话框在其公共接口中重复这些方法
哪种方法更可取?或者,这个问题还有其他解决方案/模式吗?
解决方案 3
另一个解决方案是使用包含特定事件源对象的事件处理程序的接口类。目标对象的类实现了这个接口,事件源和处理程序是松耦合的。这可能是要走的路吗?这是 GUI 中的常见做法吗?
编辑:
解决方案 4 - 发布者/订阅者模式
在以前的解决方案中,事件源对象保留对事件处理程序的引用,但是如果有多个事件侦听器(需要在事件上更新两个或更多类),就会出现问题。发布者/订阅者(观察者)模式解决了这个问题。我对这种模式进行了一些研究,并提出了两个版本来说明如何实现将事件数据从源传递到处理程序。这里的代码基于第二个:
观察者.h
通知程序.h
EventTextChanged.h
LDlg1.h:
LDlg1.cpp:
RDlg2.h:
RDlg2.cpp:
左窗格.h:
右窗格.h:
MainWnd.h:
MainWnd.cpp:
CLDlg1
该解决方案将事件源 ( ) 和处理程序 ( )解耦CRDlg2
——它们彼此不了解。
考虑到上述解决方案和 GUI 的事件驱动性质,我最初的问题正在演变为另一种形式:如何将事件从一个嵌套窗口发送到另一个嵌套窗口?
c# - 单击以查看隐藏控件的扩展面板
我目前正在开发一个 C# wpf 项目。我一直在寻找的是一个 GUI 控件,它可以在内部包含其他 GUI 控件但被隐藏,当用户单击 GUI 控件时,它会展开面板以显示隐藏的 GUI 组件。我看过其他程序,但在 C# 中找不到类似的程序。
感谢您的任何帮助,您可以提供。
asp.net-mvc - 现代主细节模式
我将使用托管在客户 Intranet 上的完全 ajax 的 Asp.net MVC 创建新的金融 Web 应用程序。我有公司设置屏幕,公司模型如下所示。
我想在一个页面中制作 master/detail , master/detail , master/detail ,另一个想法是为公司制作 master/detail 然后为区域、地区和分支制作标签,并使每个选项卡都依赖于前一个选项卡。我不喜欢这两种想法,用户很难理解页面布局,而且它的风格很老。
问题是所有应用程序页面都遵循这种模式。我需要聪明的想法来让页面布局适合这个例子的嵌套模型,如果它受到 iPad 或移动应用程序设计的启发,我更喜欢它。
谢谢
web - GUI 设计术语
我正在寻找用于描述 Web 应用程序中使用的主题按钮的图形设计术语。我理解它的方式是创建某些颜色/背景,并且各种大小和形状的按钮使用背景来显示。
我在外面见过它们——但不知道它们是如何使用的或如何谈论它。
qt4 - 如何设计一个 UI 可以很容易地用任何其他库替换 QT
我即将开始设计用户界面。UI 预计会很复杂,并且会有几个屏幕,其中一个是文本编辑器。该应用程序使用 C++ 编写,为了利用一些现有功能,我决定将 Qt 用于 UI。但是,我希望能够以这样一种方式编写 UI,以便以后可以轻松地将 Qt 替换为任何其他 UI 库——甚至可以为不同的平台使用不同的库。
我倾向于在我自己的类中包含 QT 对象并在整个过程中使用我的类。这是一个好的设计吗?我更喜欢这个而不是子类化(这是 Qt 推荐的),因为子类化似乎是一个非常严格的绑定。但是,这意味着我必须为 Qt 公开的每个方法编写一个包装器,而且我也无法使用 QtCreator。
你怎么看?您能否描述选择方法的优点/缺点。如果您能指出任何示例或任何好的设计原则,那就太好了。
java - 布局管理器推荐
我正在为街机游戏创建 GUI。它由一个 JFrame 和一些 JPanel 和一个 JMenu 组成,如图所示:
我一直在尝试使用 BorderLayout,但它没有正确显示面板。我得到的是 JMenu 正确显示。[1] 调整其宽度以包含其中的按钮。JPanel [2] 几乎完成了屏幕的其余部分。并且 [3] 在末尾显示为一条细线。
这是我用来放置它们的代码片段:
欢迎提出任何可能引发这种行为的建议。
usability - 减少实时图表中的闪烁?
我每 5 秒渲染一次散点图,其中 X 轴表示时间,Y 轴表示一组按字母顺序排列的名称。
可以选择将一组数据点(例如“X”)分组到一个类别中,因此我使用颜色来显示这一点。因此,所有具有相同颜色的“X”属于同一类别,依此类推。
问题:我有数以万计的“姓名”,它们可能会在某个时间点随机出现在图表上。真正的目的是为用户提供一个能够监控这些名称的图表。因此,每次渲染图形时,我都会得到要渲染的点列表和底层图形库:Flotr2负责为点集分配颜色。因此,如果数据集包含两类点,它分配两种颜色,如果一个属于新类别的点到达,它分配第三种颜色。因此,我观察到的是闪烁效果:
当该点消失时,颜色会恢复到之前的颜色。有没有解决这个问题的好方法?我有两个具体问题:
- 每添加一个新点,颜色都会不断变化
- 在某处添加的新点会沿任一方向垂直移动其他点。例如,如果添加了类别 2.5,则最终将类别 2 向下移动,并将类别 1 向上移动,因为应保留字母顺序。
在高度动态的场景中,这样的图表往往是无用的,因为它在视觉上显示出动态性。我能想到的一个明显的解决方案是为图中的所有点和所有可能的类别预先分配空间,以便新点的外观不会改变任何东西,而只会在某处绘制一个点。但是,我不清楚这种方法是否适合名称和类别集经常更改的大型数据集。
有没有解决这个问题的好方法?我对缓解此问题的其他图形类型持开放态度。简而言之,我想要一个能够在时间轴上显示新名称外观的实时显示。
animation - 微软office 2013动画缓动功能
在为几乎所有平台设计 GUI 时,使用动画变得简单直接。但是缓动功能的选择会极大地影响用户体验,而且我认为在 MS Office 2013(可能一般是 Windows 8)中使用的缓动功能真的很酷!有谁知道它是什么?
java - Netbeans:从 javax.swing 项目声明转到它在 UI 设计选项卡中的显示
我有几年的编程经验,并且正在开始作为软件开发实习生工作。我得到了一个大程序,它已经完成了 70% 的编写。已有数千条线路代码。其中大部分是由 UI 生成器和设计选项卡生成的,并且由于其中很多,因此在我试图了解该程序时可能很难导航。大多数主要机制已经在这个程序中就位,我的角色是将 UI 与命令行程序机制连接起来。
我遇到了这样的问题,例如:
我试图根据 UI 中要显示的空间大小来了解 String 需要采用什么格式(无论是多行还是单行)。所以最简单的找出方法是查看已经设计好的 GUI 中的这个文本区域,对吧?我找到了 String 将进入的文本区域的声明,它看起来像这样:
然后我在“设计”选项卡中显示的 UI 中找到这个文本区域。UI 已经太大了,我不得不点击几分钟,然后查看我点击的所有内容的名称,才能找到这个文本区域。
老实说,这是可行的……但仍然有点浪费时间。我只是想知道,有没有更快的方法?要按下的秘密按钮?要挥舞的魔杖?魔术拖鞋一起单击,这会将我从这个 javax.swing 项目的声明带到它在 GUI 中使用的地方吗?
谢谢!
java - 有没有其他方法可以从 Java 运行 .exe?
主要问题是我无法通过 Java 运行我的 c++ 逻辑。我是否正确创建了子流程?
谢谢你们; - - 更新!---
所以我写了这些来测试以最纯粹的方式打开.exe的能力;Eclipse 可以看到文件/不会抱怨它不存在;使用 Eclipse 中的运行按钮运行:
java文件:
C++ 文件:
输出:
无效的