Botões do GUI

Neste código é suposto ao clicar num botão aparecer o jpanel referente ao botão. Como posso fazer para em vez de usar sempre praticamente o mesmo código, usar apenas um metodo, ou parecido.

    private void disponibilidadeButtonMouseClicked(java.awt.event.MouseEvent evt) {                                                   
    if (!disponibilidadePanel.isVisible()) {
        if (disponibilidadeTableModel == null) {
            setupDisponibilidadesTable();
        }

        clientesPanel.setVisible(false);
        impressosPanel.setVisible(false);
        informacoesPanel.setVisible(false);
        reservasPanel.setVisible(false);
        disponibilidadePanel.setVisible(true);
        passarRato(disponibilidadeButton);
    }
}                                                  

private void informacoesButtonMouseClicked(java.awt.event.MouseEvent evt) {                                               
    if (!informacoesPanel.isVisible()) {
        passarRato(informacoesButton);
        disponibilidadePanel.setVisible(false);
        impressosPanel.setVisible(false);
        clientesPanel.setVisible(false);
        reservasPanel.setVisible(false);
        informacoesPanel.setVisible(true);
    }
}                                              

private void impressosButtonMouseClicked(java.awt.event.MouseEvent evt) {                                             
    if (!impressosPanel.isVisible()) {
        passarRato(impressosButton);
        disponibilidadePanel.setVisible(false);
        informacoesPanel.setVisible(false);
        clientesPanel.setVisible(false);
        reservasPanel.setVisible(false);
        impressosPanel.setVisible(true);
    }

}                                                      

private void clientesButtonMouseClicked(java.awt.event.MouseEvent evt) {                                            
    if (!clientesPanel.isVisible()) {
        passarRato(clientesButton);
        disponibilidadePanel.setVisible(false);
        impressosPanel.setVisible(false);
        informacoesPanel.setVisible(false);
        reservasPanel.setVisible(false);
        clientesPanel.setVisible(true);
    }
}

Cria um método que passa os valores boolean por parâmetro:
private void setPanel(boolean clientesPanel, boolean impressosPanel, boolean informacoesPanel, boolean reservasPanel, boolean disponibilidadePanel) {
this.clientesPanel.setVisible(clientesPanel);
this.impressosPanel.setVisible(impressosPanel);
this.informacoesPanel.setVisible(informacoesPanel);
this.reservasPanel.setVisible(reservasPanel);
this.disponibilidadePanel.setVisible(disponibilidadePanel);
}

1 curtida

É necessario usar o this?

Nesse caso, como são atributos de classe e não variáveis locais o this indica que esta é a variável atributo da classe e a que não tem this é a variável local (recebida pelo construtor). Mas só é necessário se for utilizado o mesmo nome, senão não é necessário, mas também pode ser usado.
this.clientesPanel.setVisible(clientesPanel);
ou
clientesPanel.setVisible(outroNome);

void esconderTudo() {
  disponibilidadePanel.setVisible(false);
  informacoesPanel.setVisible(false);
  clientesPanel.setVisible(false);
  reservasPanel.setVisible(false);
  impressosPanel.setVisible(false);
}

private void disponibilidadeButtonMouseClicked(java.awt.event.MouseEvent evt) {
  if (!disponibilidadePanel.isVisible()) {
    if (disponibilidadeTableModel == null) {
      setupDisponibilidadesTable();
    }
    esconderTudo();
    disponibilidadePanel.setVisible(true);
  }
}

ou

void exibirApenas(Component c) {
  disponibilidadePanel.setVisible(c == disponibilidadePanel);
  informacoesPanel.setVisible(c == informacoesPanel);
  clientesPanel.setVisible(c == clientesPanel);
  reservasPanel.setVisible(c == reservasPanel);
  impressosPanel.setVisible(c == impressosPanel);
}

private void disponibilidadeButtonMouseClicked(java.awt.event.MouseEvent evt) {
  if (!disponibilidadePanel.isVisible()) {
    if (disponibilidadeTableModel == null) {
      setupDisponibilidadesTable();
    }
    exibirApenas(disponibilidadePanel);
  }
}
1 curtida

Acho que o ideal seria você utilizar um CardLayout para exibir seus JPanels, aí não precisa ficar fazendo esse controle de apresentar um e ocultar os outros.

Outra alternativa é assim:

private void trocarTela(JButton button, JPanel tela) {
    passarRato(button);
    JPanel[] todos = new JPanel[] {
            clientesPanel,
            impressosPanel,
            informacoesPanel,
            reservasPanel,
            disponibilidadePanel                
    };
    for (JPanel panel : todos) {
        panel.setVisible(panel == tela);
    }
}

private void disponibilidadeButtonMouseClicked(java.awt.event.MouseEvent evt) {
    if (!disponibilidadePanel.isVisible()) {
        if (disponibilidadeTableModel == null) {
            setupDisponibilidadesTable();
        }
        trocarTela(disponibilidadeButton, disponibilidadePanel);
    }
}

private void informacoesButtonMouseClicked(java.awt.event.MouseEvent evt) {
    if (!informacoesPanel.isVisible()) {
        trocarTela(informacoesButton, informacoesPanel);
    }
}

private void impressosButtonMouseClicked(java.awt.event.MouseEvent evt) {
    if (!impressosPanel.isVisible()) {
        trocarTela(impressosButton, impressosPanel);
    }
}

private void clientesButtonMouseClicked(java.awt.event.MouseEvent evt) {
    if (!clientesPanel.isVisible()) {
        trocarTela(clientesButton, clientesPanel);
    }
}
2 curtidas