Tem como limitar o número de JInternalFrame em um JDesktopPane? Queira que fosse instanciado somente 3 janelas no máximo e caso o usuario quisesse abrir outra ele exibisse uma mensagem para fechar uma ou mais janelas para continuar com aquela ação.
É claro - você deu a resposta sem perceber. É só você localizar no seu programa onde é que se criam novas JInternalFrames, e contar quantas vezes você já criou. Quando atingir o número máximo, em vez de você criar uma nova JInternalFrame, crie um JOptionPane.showMessage que avise sobre a necessidade de fechar uma ou mais janelas para continuar com a ação.
Obviamente você precisa também pôr um listener em cada JInternalFrame, para diminuir o número de janelas quando você fechar uma delas.
[quote=thingol]É claro - você deu a resposta sem perceber. É só você localizar no seu programa onde é que se criam novas JInternalFrames, e contar quantas vezes você já criou. Quando atingir o número máximo, em vez de você criar uma nova JInternalFrame, crie um JOptionPane.showMessage que avise sobre a necessidade de fechar uma ou mais janelas para continuar com a ação.
Obviamente você precisa também pôr um listener em cada JInternalFrame, para diminuir o número de janelas quando você fechar uma delas. [/quote]
E ae bele Thingol?
Então eu fiz isso porém quando o usuario clica em ok na JOptionPane.showMessage ele instancia do mesmo jeito!! E outra a idéia que me sugeriram foi colocar um contator até ae tudo bem porém como faço pra quando fechar essa JinternalFrame esse contador seja decrementado sendo que o metodo esta na classe principal? :roll:
Oloco não sei contar… hahahahahaha… Tirou heim… rsrsrs… Brincadeira vou postar meu metodo aqui:
Esse é o qual eu chamo para verificar
public static void VerificaJanelas() {
if (limitaJanelas == 3) {
JOptionPane.showMessageDialog(null, "Número máximo de janela(s) aberta " +
" só pode ser de 3.\nFavor fechar uma ou mais para continuar " +
"esse processo.", "Atenção", JOptionPane.ERROR_MESSAGE);
} else {
limitaJanelas++;
}
}
e esse outro pra quando fechar o JinternalFrame
public static void LiberaJanelas() {
limitaJanelas--;
}
O primeiro quando o cara clica no botão OK da mensagem de erro ele abre a instancia e aqui esta o metodo que chama ele
public void chamaCliente() {
//desativaHyperLink();
//verificar nr maximo de janelas aberta
VerificaJanelas();
cadastroCliente chamaCli = new cadastroCliente();
chamaCli.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
desktopMain.add(chamaCli);
//transfere o focu para JinternalFrame
desktopMain.getDesktopManager().activateFrame(chamaCli);
chamaCli.setBounds(90, 90, 850, 650);
System.out.println("executado");
}
Sendo todos eles na minha classe principal. E agora clareou?
Outra coisa é que você precisa praticar “programação defensiva”.
Sabe a “direção defensiva” que o pessoal ensina para se safar no trânsito dos bandidos, seqüestros etc?
É mais ou menos a mesma coisa. No seu caso, em vez de testar contra exatamente == 3, você testaria para ver se é >= 3. É que se for 4, 5 etc (sei lá por quê ficaria com um valor maior, mas você sabe, “shit happens”) você nunca chegaria a limitar efetivamente o número de janelas.
[quote=thingol]Outra coisa é que você precisa praticar “programação defensiva”.
Sabe a “direção defensiva” que o pessoal ensina para se safar no trânsito dos bandidos, seqüestros etc?
É mais ou menos a mesma coisa. No seu caso, em vez de testar contra exatamente == 3, você testaria para ver se é >= 3. É que se for 4, 5 etc (sei lá por quê ficaria com um valor maior, mas você sabe, “shit happens”) você nunca chegaria a limitar efetivamente o número de janelas.
[/quote]
Ah pode crer vou seguir essa idéia, mas voltado ao problema acabei resolvendo em uma lógica até que simples dá uma olhada ae caso tem alguma sugestão para melhorar…
private void chamaCotacao() {
if (cotacao == 0) {
if (limitaJanelas < maxJanelas) {
telaCotacao cotacao = new telaCotacao();
cotacao.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
cotacao.setVisible(true); // display frame
desktopMain.add(cotacao);
//transfere o focu para JinternalFrame
desktopMain.getDesktopManager().activateFrame(cotacao);
cotacao.setBounds(90, 90, 850, 600);
System.out.println("executado");
limitaJanelas++;
cotacao++;
} else {
JOptionPane.showMessageDialog(null, "Número máximo de janela(s) atingido, feche uma ou mais janelas\n" +
"para continuar essa ação.", "Atenção", JOptionPane.ERROR_MESSAGE);
}
} else {
JOptionPane.showMessageDialog(null, "Janela de cotação já aberta.", "Atenção", JOptionPane.INFORMATION_MESSAGE);
}
}