Documentation

Trace:

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
jvx:reference [2020/06/15 08:15]
cduncan [Launchers and applications]
jvx:reference [2020/06/15 08:28]
cduncan [Adding a New Technology]
Line 180: Line 180:
 ===== Adding a New Technology ===== ===== Adding a New Technology =====
  
-Adding support for a new technology is as straightforward as one can imagine: simply ​creating ​the extensions/​implementations layers and implementing ​the factory for that technology. Giving a complete manual would be out for scope for this document, but the most simple approach to adding a new stack to [[https://​sourceforge.net/​projects/​jvx/​|JVx]] is to start with stubbing out the ''​%%IFactory%%''​ and implementing ''​%%IWindow%%''​. Once that one window shows up, it’s just implementing one interface after another in a quite straightforward manner. In the end, your application can switch to yet another GUI framework without the need to change your code.+Adding support for a new technology is as straightforward as one can imagine: simply ​create ​the extensions/​implementations layers and implement ​the factory for that technology. Giving a complete manual would be out for scope for this document, but the most simple approach to adding a new stack to [[https://​sourceforge.net/​projects/​jvx/​|JVx]] is to start with stubbing out the ''​%%IFactory%%''​ and implementing ''​%%IWindow%%''​. Once that one window shows up, it’s just implementing one interface after another in a quite straightforward manner. In the end, your application can switch to yet another GUI framework without the need to change your code.
  
 ===== Conclusion ===== ===== Conclusion =====
Line 253: Line 253:
 Now ''​%%testLabel%%''​ will be using the ''​%%PostfixedLabel%%''​ internally but with no indication to the user of the object that this is the case. This allows us to extend the functionality of a component completely transparently,​ especially in combination with functions that return a ''​%%UI component%%''​ and similar. Now ''​%%testLabel%%''​ will be using the ''​%%PostfixedLabel%%''​ internally but with no indication to the user of the object that this is the case. This allows us to extend the functionality of a component completely transparently,​ especially in combination with functions that return a ''​%%UI component%%''​ and similar.
  
-===== An Important Note About The Component Hierarchy =====+===== An Important Note About the Component Hierarchy =====
  
 If we create a simple component extensions, like the ''​%%BeepComponent%%''​ above, it is important to note that there is one other layer of indirection in regards to the hierarchy on the technology layer. If we create a simple frame with the ''​%%BeepComponent%%''​ in it, one might expect the following hierarchy: If we create a simple component extensions, like the ''​%%BeepComponent%%''​ above, it is important to note that there is one other layer of indirection in regards to the hierarchy on the technology layer. If we create a simple frame with the ''​%%BeepComponent%%''​ in it, one might expect the following hierarchy:
Line 335: Line 335:
 Which is easy enough, but let’s say we’d like to add logic to that wrapper. At that point, it becomes more complicated. We can’t use the same technique as the custom component from above because, in that case, the “overlaying panel” would simply not be displayed. However, there is a similar mechanism for containers: setting the UI resource container. Which is easy enough, but let’s say we’d like to add logic to that wrapper. At that point, it becomes more complicated. We can’t use the same technique as the custom component from above because, in that case, the “overlaying panel” would simply not be displayed. However, there is a similar mechanism for containers: setting the UI resource container.
  
-The UI resource container is another special mechanism that works similar to setting the UI resource, but it works exactly ​the other way round. While setting the UI resource “hides” components from the technology in UI layer, setting the UI resource container hides components from the UI layer, while they are added in the technology. ​little complicated,​ here is our example using this technique again:+The UI resource container is another special mechanism that works similar to setting the UI resource, but it works the other way round. While setting the UI resource “hides” components from the technology in UI layer, setting the UI resource container hides components from the UI layer, while they are added in the technology.. As it is a little complicated,​ here is our example using this technique again:
  
 <code java> <code java>
Line 417: Line 417:
 Let’s talk about launchers, and how they are used to start [[https://​sourceforge.net/​projects/​jvx/​|JVx]] applications. Let’s talk about launchers, and how they are used to start [[https://​sourceforge.net/​projects/​jvx/​|JVx]] applications.
  
-===== Starting an application ​=====+===== Starting an Application ​=====
  
 From a technical point of view, there are two prerequisites which must be fulfilled before a [[https://​sourceforge.net/​projects/​jvx/​|JVx]] application can run: From a technical point of view, there are two prerequisites which must be fulfilled before a [[https://​sourceforge.net/​projects/​jvx/​|JVx]] application can run:
  
-  * the JVM must have started. +  * The JVM must have started. 
-  * the technology specific system must have started.+  * The technology specific system must have started.
  
-Then, and only then, the [[https://​sourceforge.net/​projects/​jvx/​|JVx]] application can run. Depending on the implementation that is used, that can be as easily ​as instancing the factory (Swing, JavaFX), but can also mean that a servlet server has to start (Vaadin). Because we do not wish to encumber our applications with technology specific code, we have to entrust all this to an encapsulated entity, meaning the implementations of ''​%%ILauncher%%''​ and ''​%%IApplication%%''​.+Then, and only then, the [[https://​sourceforge.net/​projects/​jvx/​|JVx]] application can run. Depending on the implementation that is used, that can be as easy as instancing the factory (Swing, JavaFX), but it can also mean that a servlet server has to start (Vaadin). Because we do not wish to encumber our applications with technology-specific code, we have to entrust all this to an encapsulated entity, meaning the implementations of ''​%%ILauncher%%''​ and ''​%%IApplication%%''​.
  
 ===== Following the Chain ===== ===== Following the Chain =====
Line 665: Line 665:
 By default, the data book holds one data page and only has multiple data pages if it is the detail in a master/​detail relationship. By default, the data book holds one data page and only has multiple data pages if it is the detail in a master/​detail relationship.
  
-===== Usage example ​=====+===== Usage Example ​=====
  
-Here is a simple ​usage example of a ''​%%MemDataBook%%'',​ an ''​%%IDataBook%%''​ implementation which does only operate ​in memory:+Here is a simple example of a ''​%%MemDataBook%%'',​ an ''​%%IDataBook%%''​ implementation which only operates ​in memory:
  
 <code java> <code java>
Line 796: Line 796:
 The following method is a simplified way to launch a [[https://​sourceforge.net/​projects/​jvx/​|JVx]] application. Normally, you’d use the technology specific launcher to launch the application. These launchers do know exactly what is required to set it up and start the technology and the application. However, covering the launchers is out of scope for this post, so we will review them and their mechanics in a follow-up. The following method is a simplified way to launch a [[https://​sourceforge.net/​projects/​jvx/​|JVx]] application. Normally, you’d use the technology specific launcher to launch the application. These launchers do know exactly what is required to set it up and start the technology and the application. However, covering the launchers is out of scope for this post, so we will review them and their mechanics in a follow-up.
  
-===== The simplest ​JVx application: Just the GUI =====+===== The Simplest ​JVx Application: Just the GUI =====
  
-But first, we will start without anything. The most simple application you can create with [[https://​sourceforge.net/​projects/​jvx/​|JVx]] is an application which does open a single window and only works with in memory data (if at all). This can be easily achieved by “just starting” the application.+But first, we will start without anything. The most simple application you can create with [[https://​sourceforge.net/​projects/​jvx/​|JVx]] is an application which opens a single window and only works with in-memory data (if at all). This can be easily achieved by “just starting” the application.
  
 [[https://​blog.sibvisions.com/​2016/​12/​07/​jvx-reference-of-technologies-and-factories/​|The JVx GUI is a simple layer on top of the Technology]] which implements the actual functionality. So if we want to have a GUI we’ll need to initialize the factory before doing anything else: [[https://​blog.sibvisions.com/​2016/​12/​07/​jvx-reference-of-technologies-and-factories/​|The JVx GUI is a simple layer on top of the Technology]] which implements the actual functionality. So if we want to have a GUI we’ll need to initialize the factory before doing anything else:
Line 805: Line 805:
 UIFactoryManager.getFactoryInstance(SwingFactory.class);​ UIFactoryManager.getFactoryInstance(SwingFactory.class);​
 </​code>​ </​code>​
-With this little code we have initialized everything we need to create a simple Swing application. Now we can start to create and populate a window with something:+With this little codewe have initialized everything we need to create a simple Swing application. Now we can start to create and populate a window with something:
  
 <code java> <code java>
Line 817: Line 817:
 frame.eventWindowClosed().addListener(() -> System.exit(0));​ frame.eventWindowClosed().addListener(() -> System.exit(0));​
 </​code>​ </​code>​
-We can start to create and manipulate the GUI, in this case we are building a simple window with a label inside. Last but not least, we make sure that the JVM will exit when the window is closed.+We can start to create and manipulate the GUI. In this case we are building a simple window with a label inside. Last but not least, we make sure that the JVM will exit when the window is closed.
  
 A very good example and showcase for that is the [[https://​github.com/​sibvisions/​jvx.kitchensink|JVx Kitchensink]]. A very good example and showcase for that is the [[https://​github.com/​sibvisions/​jvx.kitchensink|JVx Kitchensink]].
  
-That’s it. That is the most simple way to start a [[https://​sourceforge.net/​projects/​jvx/​|JVx]] application. We can use all controls and we can use ''​%%MemDataBook%%''​s without any problem or limitation. ​And best of all, we can simply switch to another ​Technology ​by using another factory.+That’s it. That is the most simple way to start a [[https://​sourceforge.net/​projects/​jvx/​|JVx]] application. We can use all controlsand we can use ''​%%MemDataBook%%''​s without any problem or limitation. ​Best of all, we can simply switch to another ​technology ​by using another factory.
  
 ===== Anatomy of a remote JVx application ===== ===== Anatomy of a remote JVx application =====
This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information