[quote=“carioca”]cara…baixei o arquivo, chamei o metodo mas minha aplicação nao ficou sem ontop.
Lá tbm tem uma classe como exemplo mas ele tbm nao ficou ontop.
Vc sabe o porque?? Vc ja testou em qual sistema operacional?[/quote]
É não funcionou mesmo. Bom, mas nem tudo está perdido, eu sou totalmente contra, minha religião não permite, mas nada impede que você mesmo use jni e chame a função da API win32 que deixe a janela “always-on-top”. Eu “rascunhei” algo parecido aqui e funcionou, siga este tutorial:
1 - crie um JFrame (o meu ficou bem tosco, mas é só pra mostrar o exemplo) mais ou menos assim:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MeuFrame extends JFrame {
static {
System.loadLibrary("marciolx");
}
private native int getHwnd (String titulo);
private native void setWindowAlwaysOnTop (int hwnd);
private MeuFrame () {
super("teste");
getContentPane().add (new JButton("testando..."));
}
public static void main (String [] args) {
MeuFrame f = new MeuFrame();
f.pack();
f.show();
f.setWindowAlwaysOnTop(f.getHwnd(f.getTitle()));
}
}
2 - compile-o e em seguida rode o javah sobre ele assim:
javac MeuFrame.java
javah MeuFrame
3 - Escreva a implementação das funções em C que chamam a API Win32 assim:
#include "MeuFrame.h"
#define STRICT
#include <windows.h>
JNIEXPORT jint JNICALL Java_MeuFrame_getHwnd(JNIEnv *env, jclass obj, jstring title)
{
HWND hwnd = NULL;
const char *str = NULL;
str = (*env)->GetStringUTFChars(env, title, 0);
hwnd = FindWindow(NULL,str);
(*env)->ReleaseStringUTFChars(env, title, str);
return (jint) hwnd;
}
JNIEXPORT void JNICALL Java_MeuFrame_setWindowAlwaysOnTop
(JNIEnv *env, jclass obj, jint hwnd)
{
SetWindowPos((HWND) hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
return;
}
4 - Compile o arquivo, no meu caso eu usei o compilador de linha de comando do M$ Visual Studio 6 deste modo:
E:\trab\java\jni>cl /Ie:\j2sdk_nb\j2sdk1.4.2\include\ /Ie:\j2sdk_nb\j2sdk1.4.2\i
ncludewin32 /LD MeuFrame.c /Femarciolx.dll /link -subsystem:windows kernel32.lib
user32.lib gdi32.lib advapi32.lib comdlg32.lib shell32.lib winmm.lib wsock32.lib
5 - Agora é só rodar o MeuFrame.class e constatar que como por milagre ele ficará sempre no topo de qualquer janela.
6 - Não me peça detalhes de como funciona cada coisa, para isso consulte o tutorial de JNI na Sun, a API do Win32 no M$DN ou a documentação do seu compilador C (você ainda não tem um? :shock: :? ), meu tempo é curto