Caro amigo drigo.angelo,
Com certeza não sou o “cara” mais certo para responder-lhe esta pergunta, aqui no fórum tem gente mais gabaritada que eu.
Sobre SINGLETON ele tem me ajudado muito, pois estou desenvolvendo um framework e uma forma de manter uma única instância da classe principal foi usar o SINGLETON. Para uma definição mais profiça leia http://pt.wikipedia.org/wiki/Singleton.
O mais fácil de entendê-lo e visualizando um código que usa ele. Aí vai: (Partes desse código eu peguei aqui no fórum mesmo, infelizmente não sei a quem dar crédito. Sorry. Boa parte eu desenvolvi)
OBS: O código abaixo cria um form do tipo MDI com menu dinâmico.
package audit.forms.Telecom;
import java.awt.Dimension;
import javax.swing.JDesktopPane;
import javax.swing.JMenuBar;
import javax.swing.JFrame;
import audit.classes.CriaMenu;
import audit.forms.SistemasDisp;
public class frmPrincipal extends JFrame {
public static int tHori = 418;
public static int tVert = 300;
public static int idGrupoUsuarios;
public static int idSistema;
/**
*
* MODELO SINGLETON
*
*/
public static frmPrincipal p;
//Isso é singleton... leia com calma que entende.
public static frmPrincipal getInstancia(){
if(p == null){
p = new frmPrincipal(idGrupoUsuarios, idSistema);
}
return p;
}
public frmPrincipal(int idGrupoUsuarios, int idSistema) {
initComponents();
//idGrupo / idSistema
CriaMenu cMenu = new CriaMenu(idGrupoUsuarios,idSistema);
JMenuBar bar = new JMenuBar();
bar = cMenu.jBar();
setJMenuBar(bar);
}
@SuppressWarnings("unchecked")
private void initComponents() {
jDesk = new javax.swing.JDesktopPane();
jLabel1 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setName("frmPrincipal"); // NOI18N
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/audit/forms/resources/images/telecom_fundo.png"))); // NOI18N
jLabel1.setText("jLabel1");
jLabel1.setBounds(0, 0, 1366, 768);
jDesk.add(jLabel1, javax.swing.JLayeredPane.DEFAULT_LAYER);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jDesk, javax.swing.GroupLayout.DEFAULT_SIZE, 418, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jDesk, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
);
pack();
}
private void formWindowClosing(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
frmPrincipal.p = null;
SistemasDisp.getInstancia().setVisible(true);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
getInstancia().setSize(tHori, tVert);
getInstancia().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
java.awt.Toolkit toolkit= java.awt.Toolkit.getDefaultToolkit();
Dimension scrSize= toolkit.getScreenSize();
getInstancia().setLocation((scrSize.width-tHori)/2, (scrSize.height-tVert)/2);
getInstancia().setExtendedState(frmPrincipal.MAXIMIZED_BOTH);
getInstancia().setVisible(true);
}
});
}
public static JDesktopPane jDeskM(){
return getInstancia().jDesk;
}
private javax.swing.JDesktopPane jDesk;
private javax.swing.JLabel jLabel1;
}
Espero ter ajudado.
Quanto ao nosso amigo Milhorim, por enquanto, brinque um pouco mais nas GUI’s. Respondendo sua pergunta: Sim (por enquanto, e apenas por enquanto) crie tudo novo. Você vai ver que o trabalho é desnecessário se você usar modelos mais dinâmicos. Como extraindo teus objetos diretamente de um banco de dados, por exemplo.
Se puder ajudar, precisarei saber mais detalhes de suas necessidades, podes mandar um email para mim. diego.bilhalva@gmail.com