Skip to content

Commit e6c3d8e

Browse files
authored
Merge pull request #44 from NicoKiaru/master
adds a EasySwingDisplayViewer<T> class
2 parents 5f74fd5 + 761047d commit e6c3d8e

File tree

2 files changed

+134
-0
lines changed

2 files changed

+134
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
/.project
33
/.settings/
44
/target/
5+
/.idea/
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
package org.scijava.ui.swing.viewer;
2+
3+
import org.scijava.display.Display;
4+
import org.scijava.display.event.DisplayDeletedEvent;
5+
import org.scijava.object.ObjectService;
6+
import org.scijava.plugin.Parameter;
7+
import org.scijava.ui.UserInterface;
8+
import org.scijava.ui.swing.SwingUI;
9+
import org.scijava.ui.viewer.AbstractDisplayViewer;
10+
import org.scijava.ui.viewer.DisplayPanel;
11+
import org.scijava.ui.viewer.DisplayViewer;
12+
import org.scijava.ui.viewer.DisplayWindow;
13+
14+
import javax.swing.JPanel;
15+
import java.awt.BorderLayout;
16+
17+
/**
18+
* Class helping to build a simple Swing JPanel viewer for any object of class T
19+
* declared as a {@link org.scijava.ItemIO} output {@link Parameter}
20+
* in a {@link org.scijava.command.Command} Command
21+
*
22+
* Usage example see:
23+
* https://github.com/maarzt/example-imagej-display
24+
*
25+
* Image.sc forum thread :
26+
* https://forum.image.sc/t/displaying-and-using-and-any-object-in-a-scijava-fiji-command
27+
*
28+
* @param <T> class of object needed to be displayed in a Swing UI
29+
* @author Matthias Arzt
30+
*/
31+
32+
abstract public class EasySwingDisplayViewer<T> extends
33+
AbstractDisplayViewer<T> implements DisplayViewer<T>
34+
{
35+
private final Class<T> classOfObject;
36+
37+
@Parameter
38+
ObjectService objectService;
39+
40+
protected EasySwingDisplayViewer( Class< T > classOfObject )
41+
{
42+
this.classOfObject = classOfObject;
43+
}
44+
45+
@Override
46+
public boolean isCompatible(final UserInterface ui) {
47+
return ui instanceof SwingUI;
48+
}
49+
50+
@Override
51+
public boolean canView(final Display<?> d) {
52+
Object object = d.get( 0 );
53+
if(! classOfObject.isInstance( object ) )
54+
return false;
55+
T value = ( T ) object;
56+
return canView( value );
57+
}
58+
59+
protected abstract boolean canView( T value );
60+
protected abstract void redoLayout();
61+
protected abstract void setLabel(final String s);
62+
protected abstract void redraw();
63+
protected abstract JPanel createDisplayPanel(T value);
64+
65+
@Override
66+
public void onDisplayDeletedEvent( DisplayDeletedEvent e )
67+
{
68+
super.onDisplayDeletedEvent( e );
69+
objectService.removeObject( getDisplay().get( 0 ) );
70+
}
71+
72+
@Override
73+
public void view(final DisplayWindow w, final Display<?> d) {
74+
objectService.addObject( d.get( 0 ) );
75+
super.view(w, d);
76+
final JPanel content = createDisplayPanel( getDisplay().get(0) );
77+
setPanel( new SwingDisplayPanel(w, d, this, content) );
78+
}
79+
80+
81+
public static class SwingDisplayPanel extends JPanel implements DisplayPanel
82+
{
83+
84+
// -- instance variables --
85+
86+
private final EasySwingDisplayViewer< ? > viewer;
87+
private final DisplayWindow window;
88+
private final Display< ? > display;
89+
90+
// -- PlotDisplayPanel methods --
91+
92+
public SwingDisplayPanel( DisplayWindow window, Display< ? > display, EasySwingDisplayViewer< ? > viewer, JPanel panel )
93+
{
94+
this.window = window;
95+
this.display = display;
96+
this.viewer = viewer;
97+
window.setContent(this);
98+
setLayout( new BorderLayout() );
99+
add(panel);
100+
}
101+
102+
@Override
103+
public Display< ? > getDisplay() {
104+
return display;
105+
}
106+
107+
// -- DisplayPanel methods --
108+
109+
@Override
110+
public DisplayWindow getWindow() {
111+
return window;
112+
}
113+
114+
@Override
115+
public void redoLayout()
116+
{
117+
viewer.redoLayout();
118+
}
119+
120+
@Override
121+
public void setLabel( String s )
122+
{
123+
viewer.setLabel( s );
124+
}
125+
126+
@Override
127+
public void redraw()
128+
{
129+
viewer.redraw();
130+
}
131+
}
132+
}
133+

0 commit comments

Comments
 (0)