Salve Java Developers do GUJ! Então pessoal, eu so novo no java, comecei a 2 semanas atras o meu primeiro projeto usando GUI… Consegui fazer inserção de imagens, timers, warnings entre outros… Porém como qualquer newbie, sempre aparecem algumas duvidas… Gostaria da ajuda de vcs para conseguir soluciona-las:
->Existe alguma maneira de fazer o Java ler uma Keybind quando ele esta sob outro programa? Exemplo: O meu programa le a keybind “1” e da “Close”, mas se eu tiver alguma outra coisa rodando na frente dele, ele perde o foco e não le mais essa key bind… Eu até cheguei a testar o WHEN_IN_ANCESTOR_OF_FOCUSED_COMPONENT… Mas não tive sucesso.
->Como eu comecei do zero essa app, eu usei o NetBeans 7.0.1, daí eu usei o form “Desktop Application”, que ja tem um código gerado. Esse código gerado ele extende a classe FrameView ao invés da classe JFrame… Então eu não consigo fazer esse meu programa rodar em fullscreen, alguem tem alguma dica para fazer essa APP rodar em fullscreen?
->Existe alguma maneira de fazer uma label ou panel ficar estática em algum canto da tela, sobre qualquer outro programa? Eu gostaria de inserir um timer nessa label ou panel… Só para o usuário ficar ciente do tempo.
Obrigado pela atenção!
Para maximiza-la vc pode usar o setExtendedState() ou o Toolkit,pesquise sobre as 2 formas.
Para JLabel, JTextField, JComboBox etc…ficarem estaticos ou ainda conseguir trabalhar bem com J2SE Swing, de uma estudada em LayoutManager, veja: http://download.oracle.com/javase/tutorial/uiswing/layout/using.html
Estude sobre Swing e seus componentes, vai ajudar muito pq o NetBeans usando J2SE nada mais eh q um gerador de codigos, e por isso eh sempre bom saber o q ele ta fazendo e pra isso eh preciso conhecer os componentes Swing.
Eu tbm trabalho com NetBeans para J2SE, e nunca crio essas aplicacao Desktop q ele traz, pelo motivo de gerar muito codigo e eu prefiro comecar do Zero para saber onde esta sendo gerados os Exceptions e td mais.
t+ e boa sorte.
@FernandoPaiva
Obrigado pela força brother! Vou estudar bem isso daí que vc me passou…
Mas, quanto a “pegar” a key bind quando o programa java esta sob outro programa, vc tem alguma dica?
Edit1: Quanto ao fullscreen, eu estudei e ja intendi os métodos .setExtendedState(); e .setUndecorated(); mas o problema é que esses métodos são do JFrame e não do FrameView. Eu devo então fazer o FrameView rodar dendro de um JFrame ou devo reprogramar todo o código?
Edit2: Se eu começar um projeto do zero, sem ser Desktop App, eu perco a ferramenta de edição de Design… Ou tem alguma maneira de reativa-la?
Edit3: Apaguei o FrameWiew do meu código e implementei ele como se fosse JFrame, não tem nada errado no código, mas ele não monta mais a minha GUI antiga… Não sei mais o que fazer.
Grato pela atenção!
FrameView provavelmente eh uma derivada de JFrame, entaum deve ter sim os metodos q falei. Mas msm assim, ainda tem como usar Toolkit como falei antes.
sobre keybind, naum entendi bem o q vc precisa.
Se vc comecar do zero, basta vc criar um projeto “Java Application”(Aplicacao Java), e ir adicionando seus JFrames/JDialogs/JInternal assim como bem pretender, eu prefiro isso pq sei o q estou gerando e usando o Desktop App, ele cria um projeto padrao cheios de codigos q nunca parei pra ler o q fazem, mesmo pq prefiro naum usar. E qto mais limpo o codigo, melhor eh pra manutencao.
Vc consegue montar uma tela como a do Desktop App, mas de forma mais simples, com menos codigos e de melhor manutencao e ainda vai saber o q ta fazendo, pois naum foi a IDE q montou pra vc.
menos codigo, melhor manutencao.
t+ e boa sorte.
@FernandoPaiva;
Cara mais uma vez agradeço pelo seu feedback!
Então vamos para o código… Quanto a usar o Desktop App, por enquanto eu não tive problemas na questão de código, eu li ele inteiro de cabo a rabo e sei exatamente o que ele faz. A única coisa é que eu infelizmente não consigo implementar os métodos do JFrame, quando eu boto eles para serem chamados, o IDE diz que este método não existe e no Alt+Enter ele me da a opção de fazer um metodo chamado setUndecorated(); ou setExtendedState();
[code]public class NewFrontEndView extends FrameView {
String login = "lowise";
String passwd = "pecomil";
TopTimer t = new TopTimer();
boolean isRodando;
Timer tt;
Timer tLbl;
public NewFrontEndView(SingleFrameApplication app) {
super(app);
initComponents();
this.setExtendedState(MAXIMIZED_BOTH); //erro: diz que este método não existe!
this.setUndecorated(true); //erro: diz que este método não existe!
//Mouse invisivel;
Image cursorImage = Toolkit.getDefaultToolkit().getImage("xparent.gif");
Cursor blankCursor = Toolkit.getDefaultToolkit().createCustomCursor(cursorImage,new Point(0,0),"");
mainPanel.setCursor(blankCursor);
//Inicia KeyBinds;
mainKeyBinds();
...
[/code]
E quanto a questão do KeyBind, o que eu estou precisando é o seguinte… Supondo que eu tenho um programa rodando neste exato momento, e neste programa a tecla 1 do teclado corresponde a um botão “OK” do meu programa. Eu gostaria que o programa lesse este keybind mesmo quando ele não esta “pra frente” dos outros programas, entende? Exemplo: Gostaria que este programa que esta rodando agora, lesse o 1 mesmo com o Browser aberto na frente dele.
Edit: Quanto ao Toolkit, ele funciona pra maximizar, mas ele não tira a barra de controle do programa, aquela la no topo que tem os 3 botões “Minimizar,Maximizar,Sair”.
Grato pela atenção!
como disse antes, tente o Toolkit.
public void inicializacao(){
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension screenSize = toolkit.getScreenSize();
this.setBounds(0, 0, screenSize.width, screenSize.height);
}
Sobre o KeyBind q precisa, nunca usei e tbm nunca precisei, por isso naum vou poder ajudar. Mas no google deve ter alguma coisa sobre isso, da uma pesquisada ae…Mas em teoria, acho q naum vai ter como fazer isso, pois eu naum conheco um liestener q faca isso, mas pesquise sobre liestener.
t+ e boa sorte
[quote=fernandopaiva]como disse antes, tente o Toolkit.
public void inicializacao(){
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension screenSize = toolkit.getScreenSize();
this.setBounds(0, 0, screenSize.width, screenSize.height);
}
Sobre o KeyBind q precisa, nunca usei e tbm nunca precisei, por isso naum vou poder ajudar. Mas no google deve ter alguma coisa sobre isso, da uma pesquisada ae…Mas em teoria, acho q naum vai ter como fazer isso, pois eu naum conheco um liestener q faca isso, mas pesquise sobre liestener.
t+ e boa sorte[/quote]
@FernandoPaiva
Então brother, esse esquema do Toolkit ta dando erro agora… “it cannot be dereferenced”
Edit: Refiz todo meu programa como vc falo, herdei ele do JFrame, ficou 100% só falta agora a parte da KeyBind quando ele tiver fora de Focus e mostrar a parada por cima de um outro programa Fullscreen… Eu ja implementei o metodo .setAlwaysOnTop(); mas pra outros programas q usam FullScreen ele não adianta…
olha soh, se ja tentou usar setExtendedState e Toolkit e ta dando erros ainda. Entaum kra, vai ter q pesquisar pq naum tem outra formula pra fazer isso. Isso eh taum simples qto 2+2 = 4…Se naum esta funcionando, acho q vc deveria repensar o q eu disse de fazer td na unha, com NetBeans isso eh simples d++ !!!
t+ e boa sorte.
[quote=fernandopaiva]olha soh, se ja tentou usar setExtendedState e Toolkit e ta dando erros ainda. Entaum kra, vai ter q pesquisar pq naum tem outra formula pra fazer isso. Isso eh taum simples qto 2+2 = 4…Se naum esta funcionando, acho q vc deveria repensar o q eu disse de fazer td na unha, com NetBeans isso eh simples d++ !!!
t+ e boa sorte.[/quote]
Sim sim fera, eu ja reprogramei tudo, comecei zerado como vc me propôs, eu editei o post anterior…
A única coisa que falta é fazer as KeyBinds pegarem quando o Programa em Java está rodando por de tras de outro app, e fazer o JFrame.setAlwaysOnTop(); “Atravessar” programas que executam em fullscreen…
hummm…Essa ultima coisa q vc precisa ae, o KeyBind q vc diz, eu nunca fiz acho tbm q nunca vi fazerem…Talvez encontre alguma solução nos forums gringos de Swing+Awt…num custa pesquisar.
Se conseguir fazer, posta ae !
t+ e boa sorte !
[quote=fernandopaiva]hummm…Essa ultima coisa q vc precisa ae, o KeyBind q vc diz, eu nunca fiz acho tbm q nunca vi fazerem…Talvez encontre alguma solução nos forums gringos de Swing+Awt…num custa pesquisar.
Se conseguir fazer, posta ae !
t+ e boa sorte ![/quote]
Pode crer brother! Assim que eu achar algo eu posto!
Mas eu estou custando a achar, vou testar também um Script do AutoIT que capta keybinds e manda direto pro meu programa, independente se ele tiver no Focus ou não… Caso isso dê certo eu vou postar também. Grato pela atenção!
Mais uma duvida… Existe alguma forma de eu executar um programa dentro de um JFrame?
se vc estiver dizendo “executar” como abrir esse programa…vc pode usar o Runtime.
exemplo.
try{
Runtime r = Runtime.getRuntime();
r.exec("calc");
}catch(IOException e){
}
t+ e boa sorte !
[quote=fernandopaiva]se vc estiver dizendo “executar” como abrir esse programa…vc pode usar o Runtime.
exemplo.
try{
Runtime r = Runtime.getRuntime();
r.exec("calc");
}catch(IOException e){
}
t+ e boa sorte ![/quote]
@FernandoPaiva
Eai mano! Então, quando eu tava me referindo a executar um app dentro de um JFrame, eu quis dizer algo como JFrame.getRuntime();… Mas é claro q isso não vai funcionar :)… Mas se funcionasse eu poderia fazer um action e input map nesse JFrame, assim podendo pegar KeyBinds.
Quanto as KeyBinds: Eu achei algo sobre uma lib chamada SWT, mas to apanhando muito pra instalar ela no NetBeans e pra usa-la no meu código. Essa lib ela tem uma classe chamada PageHook que intercepta entradas do teclado, que é justamente o que eu preciso…
Quanto a label que fica “Always On Top”, eu ja vou ter que fazer um “POG” pq eu irei precisar de um codigo em Cpp chamado DirectDraw Overlay. Que também não faço a menor ideia de como fazer, mas vou estudar e implementar no meu código…