Tricks to getting Java Frames working on the OLPC
Steve Lewis
smlewis at lordjoe.com
Mon Dec 31 13:00:21 EST 2007
The following code allows Java JFrames to work properly on the OLPC -
it assumes - only one active frame and that the frame is full screen.
You can add it to common applications = the active sections work only on
the OLPC
The trick is to use showFrame and hideFrame instead of setVisible -
these cause the frame to become the graphic environments full screen
window -
With this I have menus forking. I have patched JEdit to use this and
have that application fully functional
on the OLPC - I also have a first cut at a Sugar jedit launcher -
Write me for code - I will look for a good place to post this
// OLPC Patch Slewis smlewis at lordjoe.com
/**
* true of the code is running on OLPC
*
* @return as above
*/
public static boolean isOLPC() {
String s = System.getProperty("os.name");
if (!s.equalsIgnoreCase("Linux"))
return false;
s = System.getProperty("os.arch");
if (!s.equalsIgnoreCase("i386"))
return false;
s = System.getProperty("os.version");
if (!s.contains(".olpc."))
return false;
return true;
}
/**
* a simgle active frame
*/
private static JFrame gActiveFrame;
/**
* retrieve the current active frame
* @return possibly null active frame
*/
protected static JFrame getActiveFrame() {
return gActiveFrame;
}
/**
* set the active frame in effect setting is visible
* @param pActiveFrame possibly null frame - null hides
* @throws IllegalStateException if there is an active frame
different from the argument
*/
protected static void setActiveFrame(JFrame pActiveFrame) throws
IllegalStateException
{
if(gActiveFrame != null) {
if(gActiveFrame == pActiveFrame)
return; // nothing to do
if(pActiveFrame != null) {
throw new IllegalStateException("Only one active frame
allowed");
}
else {
if(gActiveFrame != null)
gActiveFrame.setVisible(false); // is this needed???
}
}
GraphicsEnvironment env = GraphicsEnvironment.
getLocalGraphicsEnvironment();
GraphicsDevice[] devices = env.getScreenDevices();
// REMIND : Multi-monitor full-screen mode not yet supported
GraphicsDevice dev = devices[0];
boolean isFullScreen = dev.isFullScreenSupported(); // always
true on OLPC
dev.setFullScreenWindow(pActiveFrame);
if(pActiveFrame != null)
pActiveFrame.setVisible(true); // is this needed???
gActiveFrame = pActiveFrame;
}
/**
* Use this code instead of frame.setVisible(true)
*
* @param frame non-null frame
*/
public static void showFrame(JFrame frame) {
// OLPC Patch
if (isOLPC()) {
setActiveFrame(frame);
} else {
frame.setVisible(true);
}
}
/**
* Use this code instead of frame.setVisible(false)
*
* @param frame non-null frame
*/
public static void hideFrame(JFrame frame) {
// OLPC Patch
if (isOLPC()) {
if(getActiveFrame() == frame)
setActiveFrame(null);
} else {
frame.setVisible(false);
}
}
--
Steven M. Lewis PhD
4221 105th Ave NE
Kirkland, WA 98033
425-889-2694
206-384-1340 (cell)
Skype lordjoe_com
AIM LordJoe2000
ICQ 127138272
email
smlewis at lordjoe.com (permanent)
More information about the Devel
mailing list