As a result the border will remain, but only at the top side of the frame (if you want to replace the border itself, let me know. There are ways to do that.).
The next release is 1.1.2p2e, and I will upload it during the weekend.
I did not plan it, the idea with overriding “setDockable” does not work? If not I’ll try some other method to set the layer. Or am I misunderstanding what you mean with “modal Dockable”?
The idea is to make a dockable (within ScreenDockStation) act like a dialog from JOptionPane.showInternalDialog. It should constantly grab the focus until its closed.
There is some work-around: you can make JInternalFrame “modal” by using a trick with GlassPane. I try to follow this way but I still have a lot to do.
If you have a way to make one JComponent modal, you could always create a new CControl, put a CGridArea on that modal JComponent, and the Dockable into the GridArea. But you would not be able to switch a Dockable between modal and non-modal like this.
It’s a different download because its license is not LGPL (its author does not want you to write a client showing violence or pornography, the LGPL would allow that).
I’ve attached the newest version of the lib to my project and I get an error when trying to show dockable:
java.lang.IllegalStateException: the parent of 'bibliothek.gui.dock.DefaultDockable@4d4d3015' is not 'bibliothek.gui.dock.ScreenDockStation@62e10dd0' but 'null'
at bibliothek.gui.dock.DockHierarchyLock.ensureLinked(DockHierarchyLock.java:342)
at bibliothek.gui.dock.DockHierarchyLock.access$400(DockHierarchyLock.java:45)
at bibliothek.gui.dock.DockHierarchyLock$Token.release(DockHierarchyLock.java:417)
at bibliothek.gui.dock.ScreenDockStation.addDockable(ScreenDockStation.java:1354)
at bibliothek.gui.dock.ScreenDockStation.addDockable(ScreenDockStation.java:1291)
at bibliothek.gui.dock.ScreenDockStation.addDockable(ScreenDockStation.java:1277)
at MainDemo.<init>(MainDemo.java:167)
at MainDemo.main(MainDemo.java:70)
Exception in thread "main" java.lang.NoSuchMethodError: bibliothek.gui.dock.station.screen.window.InternalDockDialog.<init>(Lbibliothek/gui/dock/ScreenDockStation;Lbibliothek/gui/dock/station/screen/window/WindowConfiguration;Ljavax/swing/JDesktopPane;I)V
at bibliothek.gui.dock.station.screen.window.InternalScreenDockWindowFactory.createWindow(InternalScreenDockWindowFactory.java:84)
at bibliothek.gui.dock.ScreenDockStation.createWindow(ScreenDockStation.java:1895)
at bibliothek.gui.dock.ScreenDockStation.addDockable(ScreenDockStation.java:1318)
at bibliothek.gui.dock.ScreenDockStation.addDockable(ScreenDockStation.java:1291)
at bibliothek.gui.dock.ScreenDockStation.addDockable(ScreenDockStation.java:1277)
at MainDemo.<init>(MainDemo.java:167)
at MainDemo.main(MainDemo.java:70)
These lines cause the bug:
final InternalScreenDockWindowFactory internal = new InternalScreenDockWindowFactory( desktop );
properties.set( ScreenDockStation.WINDOW_FACTORY, internal );
// (***)
screen.setWindowFactory(internal);
The entire code:
DockFrontend front = new DockFrontend(frame);
front.setShowHideAction(true);
controller = front.getController();
JDesktopPane desktop = new JDesktopPane();
// drag and drop controllers
ScreenDockWindowConfiguration dragEnabled = new ScreenDockWindowConfiguration(){
@Override
public WindowConfiguration getConfiguration(ScreenDockStation arg0,
Dockable arg1) {
WindowConfiguration wConf = new WindowConfiguration();
wConf.setAllowDragAndDropOnTitle(false);
wConf.setResizeable(false);
wConf.setMoveOnTitleGrab(false);
wConf.setMoveOnBorder(true);
return wConf;
}
};
ScreenDockWindowConfiguration dragDisabled = new ScreenDockWindowConfiguration(){
@Override
public WindowConfiguration getConfiguration(ScreenDockStation arg0,
Dockable arg1) {
WindowConfiguration wConf = new WindowConfiguration();
wConf.setAllowDragAndDropOnTitle(false);
wConf.setResizeable(false);
wConf.setMoveOnTitleGrab(false);
wConf.setMoveOnBorder(false);
return wConf;
}
};
DockProperties properties = controller.getProperties();
final InternalBoundaryRestriction boundary = new InternalBoundaryRestriction( desktop );
final InternalFullscreenStrategy fullScreen = new InternalFullscreenStrategy( desktop );
final InternalScreenDockWindowFactory internal = new InternalScreenDockWindowFactory( desktop );
properties.set( ScreenDockStation.BOUNDARY_RESTRICTION, boundary );
properties.set( ScreenDockStation.FULL_SCREEN_STRATEGY, fullScreen );
properties.set( ScreenDockStation.WINDOW_FACTORY, internal );
properties.set(ScreenDockStation.WINDOW_CONFIGURATION, this.dragEnabled);
screen = new ScreenDockStation( controller.getRootWindowProvider() );
controller.add( screen );
screen.setBoundaryRestriction(boundary);
screen.setFullscreenStrategy(fullScreen);
screen.setWindowFactory(internal);
// create some dockables
for (int i=0;i<4;i++){
Dockable d = create(""+i,i);
screen.drop( d, new ScreenDockProperty( i*140, 200, 128, 128 ));
}
“NoSuchMethodError” sounds like you have some old class files. You are certain your classpath is clean, and your project compiled without errors? And also ensure that you are not accidentally mixing classes from your workspace and the library with the same name.