Então...tem uma coisa no teu código de que não estou convencido de que está certo, vou tentar lhe mostrar.
public JSplitPane getMainSplitPane() {
_panelLogin = new PanelLogin();
_mainSplitPane = new JSplitPane(); // <---------------------------<< NOVA instancia sendo criada.
_panelLogin.setListener(this);
_mainSplitPane.setOpaque(true);
_mainSplitPane.setLeftComponent(_panelLogin);
_mainSplitPane.setRightComponent(new MainPanelImage());
_mainSplitPane.setDividerLocation(380);
return _mainSplitPane;
}
link1.setText("Link 1");
link1.setIcon(new ImageIcon("resources/icons/ambulance.png"));
link1.setForeground(Color.BLACK);
link1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MainFrame.getInstance().getMainSplitPane.setRightComponent(new PanelPatientRegister); // <---<< PONTO DE ATENÇÂO
}
});
Agora vamos falar desta parte aqui MainFrame.getInstance().getMainSplitPane.setRightComponent(new PanelPatientRegister);
Vou dividir isto em passos para tentar facilitar.
1) MainFrame.getInstance() <---- Isto retorna a istancia (Singleton) do JFrame
2) getMainSplitPane() <-- Executa este método (está no objeto JFrame Singleton) que retorna MAIS UMA (a anterior vc já está vendo) instancia (NOVA) de uma JSplitPane
3) setRightComponent(new PanelPatientRegister) <--- Executa este método que está na NOVA instancia da JSplitPane, passando como parametro uma instancia da PanelPatientRegister.
O que deve estar acontecendo é que logo no inicio da execução vc executa o método getMainSplitPane() pega a instancia JSplitPane retornada e inclui no painel do JFrame (Singleton ). Depoi quando vc clica no botão o método getMainSplitPane() é acionado DE NOVO gerando MAIS UMA instancia JSplitPane que NÂO é adicionada em lugar nenhum ( veja o passo 2 ), por isso que vc não vê os componentes que estão na instancia da classe PanelPatientRegister.
Esta linha _mainSplitPane = new JSplitPane(); esta substituindo (matando) o endereço da instancia ANTERIOR quando vc clica no botão.
Tem mais outra coisa, este método getMainSplitPane() é um "getter" e como tal deveria apenas lhe devolver o objeto _mainSplitPane da seguinte forma:
public JSplitPane getMainSplitPane() {
return _mainSplitPane;
}
o restante do código que retirei de dentro só deveria ser executado UMA UNICA VEZ.
Desculpe se viajei muito...
flws