Closed. This question is opinion-based。它当前不接受答案。












想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

6年前关闭。



Improve this question





我想问您有关在Swing中创建GUI的一个技术方面。假设我有一个JFrameJDialog(没关系),其内容以许多JPanels(设置,操作,显示数据,图表等)进行了组织-全部集中在一个框架中。

例如:here

我现在要做的是在一个文件中定义所有组件(将其命名为MainPanel.java)并在JPanels中进行组织。有一个单独的方法来组织每个小组

private void organizePanels() {
  pnlSettings = createPnlSettings();
  pnlActions = createPnlActions();
  pnlChart = createPnlChart();
  // ...
}


每种方法负责设置JPanel的布局,组织其中的组件等。当我有3-4个不复杂的面板时,这很有意义(我的意思是很容易理解)。但是,如果我创建一个更复杂的结构,它将开始成为一个小的维护梦night(或者是一个很好的起点)。

这就是为什么我要使用这种方法:
-为每个JPanel创建一个单独的类
-每个类都应该有一个访问其内部组件的访问器(单击JButton中的JPanel A应该会刷新其他JPanel中的JCombo)。
-MainPanel应该以某种方式提供面板之间的通信。

因此,在mainPanel中,我将仅引用JPanels,而不引用其中的组件。访问特定数据的时间会更长一些(用pnlActions.getSaveButton.setEnabled(true)代替btnSave.setEnabled(true),但这可能是很自然的结果。我还可以公开JPanels中的所有组件。

您认为这种方法正确吗?您是否认为我应该一直使用第二种方法,或者我的第一种方法适合于不太复杂的结构?

你有什么经验?

最佳答案

就像GUI应用程序设计中的许多事情一样,最好的方法是权衡问题,最终要取决于应用程序本身。没有适用于许多应用程序的正确答案。

您的方式会行得通,在某些情况下可能是最好的。但是,它的确将GUI面板的组织知识分散到多个类中,这可能会使维护工作变得比原本需要的困难。如果以后由于某种原因想要将某些按钮或按钮组移至另一个面板,则数据的访问方式会发生变化,这意味着您必须在访问数据的任何位置以及按钮所在的位置更改代码。

您也可以设计一个仅包含面板数据的类,以确保其中没有UI依赖项。 Swing或任何其他UI包都不应出现在导入列表中的任何位置,并且如果您想在SWT或Spring MVC或Windows应用程序中使用此类,则它应该可以在那里不变地工作。然后,为每个面板提供对该类的单例实例的引用,并让它们根据需要获取和设置值。这样,您可以按自己喜欢的方式更改UI,而无需更改数据的访问方式。

此方法假定给定帧/对话框的“数据模型”不是那么复杂,以至于要处理它的类本身就过于复杂。对于如此复杂的框架,您可以考虑将整个模型划分为多个部分,因为模型的不同部分仅需要从UI的某些部分进行访问,并在这些部分之间划分访问权限。

关于java - Java在JFrame中 Swing 许多JPanels- setter/getter 还是合而为一? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19344213/

10-10 16:23