Best way to handle JFrame components from outside class

浪尽此生 提交于 2019-12-11 01:19:55

问题


I was developing a swing application which calls multiple methods & initializes different classes. Also I have multiple threads in which they process intermediate results. My requirement is to display that intermediate data on some labels and text boxes on the fly.

Please help me which of the below approach is best in terms of memory and performance.

  1. I can have setter methods for all my labels and text boxes. So that I can call these methods using that swing class object but in that case I need to pass the swing class object to every class wherever I want to set the data to labels.
  2. Another way is I can create public static object of my swing class and I would call it from any class whenever I need to set the label text.

First method creates more overhead as I need to pass the my Swing class object to other classes.

Second method is easiest way but creating static objects might create confusion as this application contains threads.

I just want to know which one to go for and why?

Otherwise if anybody have worked on some complex swing app development - how did you manage these kind of issues?


回答1:


This example is typical of your first approach in a multi-threaded context. For expedience, the model and view are tightly coupled: each worker thread receives a reference to the label it should update. The alternative is loose coupling: each view registers to listen to the model, which notifies all registered listeners using the observer pattern.

This simpler example uses both approaches:

  • Tight coupling: The worker obtains a reference to its target label in an enclosing scope.

  • Loose coupling: The enclosing view registers a PropertyChangeListener, which the model uses to signal the view via setProgress().

You'll need to decide which is important in your application. I agree with @JB Nizet's comment about the second approach.




回答2:


Why dont you use the 2nd method with Singleton principle, where you can use the same single instance of the swing class, so there will be no use of using static , and its sometime confusing cause we are uncertain of the order in which the JVM loads the static members...




回答3:


Think of a GUI as a model with a view. The GUI components make up the view, while you create model classes that represent the model. Changes to the values in the model are reflected in the view. The rest of the application interacts with the model, and not the view.

Here's one example from a Java Spirograph GUI that I did.



来源:https://stackoverflow.com/questions/11384107/best-way-to-handle-jframe-components-from-outside-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!