Verificar jinternalframe

Olá pessoal!!!

Essa é a forma que eu abro um jinternalframe no jdesktoppane. O que quero saber é como faço para não abrir ele novamente caso ele já esteja aberto.

    private void GER001CadastroUsuarios (java.awt.event.ActionEvent evt) throws ParseException{
        GER001CadastroUsuarios usuarios = new GER001CadastroUsuarios();
        this.desktopPane1.add(usuarios);
        usuarios.setLocation(10, 10);
        usuarios.setVisible(true);

Obrigado pela força.

Luís Fernando Schneiders

Transforme a variável usuários numa propriedade, e então:

private void GER001CadastroUsuarios (java.awt.event.ActionEvent evt) throws ParseException{ if (usuarios != null) { usuarios = new GER001CadastroUsuarios(); this.desktopPane1.add(usuarios); usuarios.setLocation(10, 10); usuarios.setVisible(true); } }

Só lembre de setar usuários para null quando o JInternalFrame for fechado.

[quote=ViniGodoy]Transforme a variável usuários numa propriedade, e então:

private void GER001CadastroUsuarios (java.awt.event.ActionEvent evt) throws ParseException{ if (usuarios != null) { usuarios = new GER001CadastroUsuarios(); this.desktopPane1.add(usuarios); usuarios.setLocation(10, 10); usuarios.setVisible(true); } }

Só lembre de setar usuários para null quando o JInternalFrame for fechado.[/quote]

Como assim numa propriedade?

Cara…

eu faço assim…

if(internal.isVisible()){
internal.moveToFront();
}

Se ele for visivel ele joga na tela!!
porque vc pode ter mais abertos no momento.

xD~~

[quote=altitdb]Cara…

eu faço assim…

if(internal.isVisible()){
internal.moveToFront();
}

Se ele for visivel ele joga na tela!!
porque vc pode ter mais abertos no momento.

xD~~[/quote]

Olá altitdb

Fiz o seguinte teste. Mas ele não vai para o usuarios.moveToFront(); depois que já tenho está tela aberta.

O que será que pode ser isso?

    private void GER001CadastroUsuarios (java.awt.event.ActionEvent evt) throws ParseException{
        GER001CadastroUsuarios usuarios = new GER001CadastroUsuarios();
        this.desktopPane1.add(usuarios);
        try {
            if(usuarios.isVisible()== true){
                usuarios.moveToFront();

            }
            usuarios.setVisible(true);
            }
        catch (Exception e) {
            usuarios.setVisible(true);
        }

O Porque eu não sei…

eu sempre faço um metodo para jogar os Internais…

tipo…

void mostrar(JInternalFrame j){
if(j.isVisible()==true){
j.moveToFront();
}else{
j.setVisible(true);
}
}

mostrar(meuInternal);

[quote=altitdb]O Porque eu não sei…

eu sempre faço um metodo para jogar os Internais…

tipo…

[code]
void mostrar(JInternalFrame j){
if(j.isVisible()==true){
j.moveToFront();
}else{
j.setVisible(true);
}
}

mostrar(meuInternal);
[/code][/quote]

Amigo, obrigado pela ajuda, mas não consigo desta forma.

Abraço.

Luís Fernando Schneiders

[quote=altitdb]O Porque eu não sei…

eu sempre faço um metodo para jogar os Internais…

tipo…

void mostrar(JInternalFrame j){
if(j.isVisible()==true){
j.moveToFront();
}else{
j.setVisible(true);
}
}

mostrar(meuInternal);

[/quote]

Isso é gambiarra. Segue o conselho do ViniGodoy e faz a verificação utilizando o null.

JANELA_FECHADA == NULL

JANELA_VISÍVEL == isVisible();

Aqui tu não só fez uma gambiarra como provocou o suicídio de três engenheiros da Sun MicroSystems.

Capturar uma Exception dessa forma é muito feio.

Olá r4it0.light.

Certo fiz deste modo:

[code]// variável de instância
private GER001CadastroUsuarios usuarios;

// método
private void GER001CadastroUsuarios (java.awt.event.ActionEvent evt) throws ParseException{
if (usuarios == null) {
usuarios = new GER001CadastroUsuarios();
this.desktopPane1.add(usuarios);
usuarios.setLocation(10, 10);
}
usuarios.setVisible(true);
}
[/code]

Mas me responde outra dúvida. Como faço para setar o usuarios como null no botão SAIR do Jinternalframe para assim acessar novamente esse jinternalframe?

Obrigado pela atenção.

Luís Fernando Schneiders

[quote=r4it0.light][quote=altitdb]O Porque eu não sei…

eu sempre faço um metodo para jogar os Internais…

tipo…

void mostrar(JInternalFrame j){
if(j.isVisible()==true){
j.moveToFront();
}else{
j.setVisible(true);
}
}

mostrar(meuInternal);

[/quote]

Isso é gambiarra. Segue o conselho do ViniGodoy e faz a verificação utilizando o null.

JANELA_FECHADA == NULL

JANELA_VISÍVEL == isVisible();

Aqui tu não só fez uma gambiarra como provocou o suicídio de três engenheiros da Sun MicroSystems.

Capturar uma Exception dessa forma é muito feio.

[/quote]

hehehe… Só 3?? ^^

a Exception… eu tava com pressa e escrevi correndo!!

eu sempre trato elas de forma diferente!!

xD~~

Olá pessoal!!!

Depois de alguns dias levando um laço consegui o que precisava, que era fazer um teste com os jinternalframe. Abrir somente um e depois de fechado conseguir abrir ele novamente. Abaixo o modelo:

Na class que extende o JFrame tive que colocar:

public class TelaPrincipal extends JFrame implements ActionListener
{
    static GER001CadastroUsuarios cusuarios;
    static GER002CadastroBancos cbancos;
    static GER003CadastroDespesas cdespesas;
    static GER004LancamentoBancos lbancos;
    static GER005LancamentoDespesas ldespesas;

e para o testar se o jinternalframe já estava aberto

 public void GER001CadastroUsuarios (java.awt.event.ActionEvent evt) throws ParseException, PropertyVetoException{
        if (cusuarios == null) {
            cusuarios = new GER001CadastroUsuarios();
            this.desktopPane1.add(cusuarios);
            cusuarios.setLocation(10, 10);
        }
            cusuarios.moveToFront();
            cusuarios.setVisible(true);
    }

e no botão sair do JinternalFrame

    private void botaoSairActionPerformed (java.awt.event.ActionEvent evt){
        TelaPrincipal.cusuarios = null;
        this.dispose();
        
    }

Obrigado a todos

Abraços.

Luís Fernando Schneiders

Para abrir as janelas (JInternalFrame) no JDesktopPane, eu utilizo da seguinte forma:

Tenho uma função que fica na TelaPrincipal.java que adiciona as telas no Desktop:

    //ADICIONA TELAS (JInternalFrame) AO JDesktopPane
    // usado assim: this.addTelaDesk(new TelaFuncionarios(null));
    public void addTelaDesk(JInternalFrame tela){
        for (JInternalFrame jInternalFrame : this.getTelaDesktop().getAllFrames()) {
            // se uma janela semelhante estiver aberta
            if(jInternalFrame.getClass().toString().equalsIgnoreCase(tela.getClass().toString())){
                jInternalFrame.moveToFront(); // traz janela para frente para facilitar a escolha
                
                Object[] opções = {"Utilizar Aberta", "Abrir Nova"};
                int qst = JOptionPane.showOptionDialog(null, "Abrir uma nova janela ou utilizar a que ja esta aberta?",
                                                "Janela duplicada",
                                                JOptionPane.DEFAULT_OPTION,
                                                JOptionPane.QUESTION_MESSAGE,
                                                null,
                                                opções,
                                                opções[0]
                                        );
                // se utilizar a aberta retorna e não abre outra,
                // caso contrário sai do for e abre outra igual
                if(qst == 0){
                    return;
                }else if(qst == 1){
                    break;
                }
            }
        }

        this.telaDesktop.add(tela); //adiciona na tela
        tela.setVisible(true); // seta visivel
        this.cascade(); //coloca em cascata para deixar "pratico"
    }

A função para colocar em cascata:

    private void cascade() {
        JDesktopPane desk = this.getTelaDesktop(); // JDesktopPane
        Rectangle dBounds = desk.getBounds(); // Bordas do JDesktopPane
        int separation = 25; // distancia entre as janelas

        // Pega todos os frames e organiza, o ultimo fica mais em baido e mais pra cima
        int i = desk.getAllFrames().length; // quantidade de frames
        for (JInternalFrame f : desk.getAllFrames()) {
            f.setLocation(i*separation, i*separation);
            i--; //mutiplicador
        }
    }  

Exemplos de como chamar depois:


this.addTelaDesk(new TelaFuncionarios(null));

String matricula = JOptionPane.showInputDialog("Digite a matrícula do funcionário:");
this.addTelaDesk(new TelaFuncionarios(matricula));

Pra mim ta funcionando bem como quero, mas qualquer sugestão é bem vinda!

Abraços

Precisava ressuscitar 3 tópicos antigos para dizer isso?

Precisava ressuscitar 3 tópicos antigos para dizer isso?[/quote]

É né, achei que poderia ajudar mais…
sou novo no forum, da próxima posto em mais de um só se for recente…

abs