From b573254e018cd5ae310a537a5fa598c7822972ed Mon Sep 17 00:00:00 2001 From: Jan Kozusznik <jan@kozusznik.cz> Date: Wed, 17 Jan 2018 16:53:34 +0100 Subject: [PATCH] Refactoring UI elements --- .../java/cz/it4i/fiji/haas/ui/FXFrame.java | 71 +++++++++++-------- .../ui/CheckStatusOfHaaSController.java | 3 +- .../ui/CheckStatusOfHaaSWindow.java | 8 +-- 3 files changed, 45 insertions(+), 37 deletions(-) diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/FXFrame.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/FXFrame.java index c0a72385..f3601be3 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/FXFrame.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/FXFrame.java @@ -2,6 +2,7 @@ package cz.it4i.fiji.haas.ui; import java.awt.Dimension; import java.awt.Frame; +import java.awt.Window; import java.io.IOException; import java.net.URL; import java.util.function.Consumer; @@ -14,17 +15,23 @@ import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; -public class FXFrame<C> extends JDialog { + +public class FXFrame<C extends FXFrame.Controller> extends JDialog { + + public interface Controller { + void init(Window frame); + } private static final long serialVersionUID = 1L; private JFXPanel fxPanel; private String fxmlFile; private Consumer<C> controlerInit; + private C controller; public FXFrame(String fxmlFile) { this(null, fxmlFile); } - + public FXFrame(Frame applicationFrame, String string) { super(applicationFrame); fxmlFile = string; @@ -33,12 +40,12 @@ public class FXFrame<C> extends JDialog { /** * Create the JFXPanel that make the link between Swing (IJ) and JavaFX plugin. */ - protected void init( Consumer<C> controlerInit) { + protected void init(Consumer<C> controlerInit) { this.controlerInit = controlerInit; this.fxPanel = new JFXPanel(); Platform.setImplicitExit(false); this.add(this.fxPanel); - + // The call to runLater() avoid a mix between JavaFX thread and Swing thread. Platform.runLater(new Runnable() { @Override @@ -50,34 +57,38 @@ public class FXFrame<C> extends JDialog { } + protected C getController() { + return controller; + } + private void initFX(JFXPanel fxPanel) { // Init the root layout - try { - FXMLLoader loader = new FXMLLoader(); - URL res = FXFrame.class.getResource(fxmlFile); - loader.setLocation(res); - Parent rootLayout = (Parent) loader.load(); - - // Get the controller and add an ImageJ context to it. - C controller = loader.<C>getController(); - controlerInit.accept(controller); - - // Show the scene containing the root layout. - Scene scene = new Scene(rootLayout); - this.fxPanel.setScene(scene); - this.fxPanel.setVisible(true); - - // Resize the JFrame to the JavaFX scene - Dimension dim = new Dimension((int) scene.getWidth(), (int) scene.getHeight()); - this.fxPanel.setMinimumSize(dim); - this.fxPanel.setMaximumSize(dim); - this.fxPanel.setPreferredSize(dim); - //this.setSize((int) scene.getWidth(), (int) scene.getHeight()); - this.pack(); - - } catch (IOException e) { - e.printStackTrace(); -} + try { + FXMLLoader loader = new FXMLLoader(); + URL res = FXFrame.class.getResource(fxmlFile); + loader.setLocation(res); + Parent rootLayout = (Parent) loader.load(); + + // Get the controller and add an ImageJ context to it. + controller = loader.<C>getController(); + controlerInit.accept(controller); + controller.init(this); + // Show the scene containing the root layout. + Scene scene = new Scene(rootLayout); + this.fxPanel.setScene(scene); + this.fxPanel.setVisible(true); + + // Resize the JFrame to the JavaFX scene + Dimension dim = new Dimension((int) scene.getWidth(), (int) scene.getHeight()); + this.fxPanel.setMinimumSize(dim); + this.fxPanel.setMaximumSize(dim); + this.fxPanel.setPreferredSize(dim); + // this.setSize((int) scene.getWidth(), (int) scene.getHeight()); + this.pack(); + + } catch (IOException e) { + e.printStackTrace(); + } } diff --git a/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSController.java b/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSController.java index 5c4b41ae..4763b203 100644 --- a/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSController.java +++ b/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSController.java @@ -9,6 +9,7 @@ import org.scijava.log.LogService; import org.scijava.plugin.Parameter; import cz.it4i.fiji.haas.JobManager.JobInfo; +import cz.it4i.fiji.haas.ui.FXFrame; import cz.it4i.fiji.haas.ui.ModalDialogs; import cz.it4i.fiji.haas.ui.ObservableValueAdapter; import cz.it4i.fiji.haas.ui.ProgressDialog; @@ -22,7 +23,7 @@ import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.input.ContextMenuEvent; -public class CheckStatusOfHaaSController { +public class CheckStatusOfHaaSController implements FXFrame.Controller{ @Parameter private LogService logService; diff --git a/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSWindow.java b/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSWindow.java index 5c7b7247..1e089cd5 100644 --- a/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSWindow.java +++ b/haas-snakemake-spim/src/main/java/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaSWindow.java @@ -15,9 +15,7 @@ public class CheckStatusOfHaaSWindow extends FXFrame<CheckStatusOfHaaSController @Parameter private Context context; - - private CheckStatusOfHaaSController controller; - + public CheckStatusOfHaaSWindow(Frame applicationFrame, Context context) { super(applicationFrame, "/cz/it4i/fiji/haas_snakemake_spim/ui/CheckStatusOfHaaS.fxml"); this.context = context; @@ -30,15 +28,13 @@ public class CheckStatusOfHaaSWindow extends FXFrame<CheckStatusOfHaaSController Platform.runLater(new Runnable() { @Override public void run() { - controller.addJob(job); + getController().addJob(job); } }); } private void initController(CheckStatusOfHaaSController controller) { - this.controller = controller; context.inject(controller); - controller.init(this); } } -- GitLab