Multiple image sizes in frame icon (window icon) in Swing

D

Dan Polansky

Hello, in Swing, how can I achieve that a frame icon has several
images associated with it, in different sizes like 16x16 and 32x32
pixels? (In Windows, this is useful, as the icon in the window of the
frame has usually size 16x16 while the icon as shown when you press Alt
+Tab to switch between several application has 32x32 pixels.)

Thank you, Dan
 
L

Larry Barowski

Dan Polansky said:
Hello, in Swing, how can I achieve that a frame icon has several
images associated with it, in different sizes like 16x16 and 32x32
pixels? (In Windows, this is useful, as the icon in the window of the
frame has usually size 16x16 while the icon as shown when you press Alt
+Tab to switch between several application has 32x32 pixels.)

In Java 1.6 you can use Window.setIconImages(). For older
versions of Java you'd have to do it using JNI for each
platform.
 
D

Dan Polansky

In Java 1.6 you can use Window.setIconImages(). For older
versions of Java you'd have to do it using JNI for each
platform.

Larry, that is a good news. Do you know or have a link on how to do it
using JNI, at least for Windows? Dan
 
L

Larry Barowski

Dan Polansky said:
Larry, that is a good news. Do you know or have a link on how to do it
using JNI, at least for Windows? Dan

Following is what I use to load small and large icons from a
..ico file. I stripped out a caching mechanism, so it may not
compile as-is. Of course, if you've never used jni you'll have
to figure that out as well.

JNIEXPORT void JNICALL Java_nativ_W32Native_setIconX(JNIEnv *env,
jclass obj, jobject wnd, jstring icon_path) {
JAWT awt;
awt.version = JAWT_VERSION_1_3;
if(JAWT_GetAWT(env, &awt) == JNI_FALSE)
return;

JAWT_DrawingSurface *ds = awt.GetDrawingSurface(env, wnd);
if(ds == NULL)
return;

jint lock = ds->Lock(ds);
if((lock & JAWT_LOCK_ERROR) != 0) {
awt.FreeDrawingSurface(ds);
return; }

JAWT_DrawingSurfaceInfo *dsi = ds->GetDrawingSurfaceInfo(ds);
if(dsi != NULL) {
JAWT_Win32DrawingSurfaceInfo *dsi_win =
(JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
HWND win_handle = dsi_win->hwnd;
if(win_handle != NULL) {
LPTSTR icon_path_str = (LPTSTR)GetString(env, icon_path);
HICON icon, icon_sm;
bool found = false;
icon = (HICON)LoadImage(NULL, icon_path_str, IMAGE_ICON,
GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON),
LR_LOADFROMFILE);
icon_sm = (HICON)LoadImage(NULL, icon_path_str, IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON),
LR_LOADFROMFILE);
if(icon != NULL)
SendMessage(win_handle, WM_SETICON, ICON_BIG, (long)icon);
if(icon_sm != NULL)
SendMessage(win_handle, WM_SETICON, ICON_SMALL, (long)icon_sm);

ReleaseString(env, icon_path, icon_path_str);
}
ds->FreeDrawingSurfaceInfo(dsi);
}

ds->Unlock(ds);
awt.FreeDrawingSurface(ds);
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,982
Messages
2,570,190
Members
46,736
Latest member
zacharyharris

Latest Threads

Top