Bom dia a todos.
Eu particularmente também não vejo problema nenhum em utilizar classes estáticas. Contudo você não precisa declarar todos os métodos de sua classe como estáticos. No seu caso por exemplo, basta ter um ou dois métodos estáticos dentro da sua classe principal que eu costumo chamar de FramePrincipal.
Em uma classe composta de métodos estáticos e dinâmicos, somente os métodos dinâmicos serão acessados na instanciação do objeto, enquanto que os métodos estáticos podem ser acessados apenas com o nome da classe (Referência da classe).
Como já disse o nosso amigo Rmendes08, a cada instanciação de um objeto dessa classe, os atributos são reciclados com um valor novo padrão definido ou não por você no construtor da classe através desses métodos dinâmicos, os valores dos métodos de cada objeto se diferenciam um do outro até mesmo em caso de herança (extends), já os métodos estáticos permaneceram com o mesmo valor para todos os objetos, por mais que voce crie várias instanciações (Objetos) dessa classe, e ainda assim cada objeto pode ter acesso ao método estático se for declarado como público, facilitando muito a vida do desenvolvedor.
A minha sugestão é essa:
1º) Crie apenas dois métodos estáticos dentro da sua classe FramePrincipal assim:
public class FramePrincipal extends JFrame {
private static String user_log;
public static String getUser_log(){
return user_log;
}
public static void setUser_log(String user_log){
FramePrincipal.user_log = user_log;
}
......
......
......
}
Dentro do construtor da classe FramePrincipal ficando toda ela da seguinte forma:
public class FramePrincipal extends JFrame {
private static String user_log;
public static String getUser_log(){
return user_log;
}
public static void setUser_log(String user_log){
FramePrincipal.user_log = user_log;
}
public FramePrincipal(){
super("Cadastro de Visitantes");
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
FrameLogin frmlogin = new FrameLogin(this);
if (frmlogin.getResponse()){
setVisible(true);
// Dá acesso ao usuário
} else {
// Fecha a aplicação em caso de não autenticação
dispose();
System.exit(0);
}
.....
.....
.....
}
Agora eis minha a classe login
public class FrameLogin extends JDialog implements ActionListener, KeyListener {
private JTextField txtlogin;
private JPasswordField txtpassword;
private JButton btnok, btncancel;
private String mens;
private Boolean response = false;
private int accessdenied = 3;
public FrameLogin(JFrame parent){
super(parent, "Acesso ao programa Tal", true);
setContentPane(getContainer());
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
pack();
setLocationRelativeTo(this);
setVisible(true);
}
public JPanel getContainer(){
JPanel container = new JPanel(new GridLayout(4,1));
// Definição da fonte
Font font = new Font("Tahoma", 0, 14);
// Login
JLabel lblogin = new JLabel("Digite o seu login......");
lblogin.setFont(font);
container.add(lblogin);
txtlogin = new JTextField(10);
txtlogin.setFont(font);
txtlogin.addKeyListener(this);
container.add(txtlogin);
// Password
JLabel lblpassword = new JLabel("Digite a sua senha.....");
lblpassword.setFont(font);
container.add(lblpassword);
txtpassword = new JPasswordField(10);
txtpassword.setFont(font);
txtpassword.addKeyListener(this);
container.add(txtpassword);
// Botões
// OK
btnok = new JButton("OK");
btnok.addActionListener(this);
container.add(btnok);
// Cancel
btncancel = new JButton("Cancelar");
btncancel.addActionListener(this);
JPanel panelbutton = new JPanel(new GridLayout(1,2);
panelbutton.add(btnok);
panelbutton.add(btncancel);
container.add(panelbutton);
return container;
}
// Verifica se os campos estão vazios
private Boolean checkTextField(){
if ("".equals(txtlogin.getText())){
mens = "Campo login em branco.\n";
mens += "Digite o login";
} else if ("".equals(txtpassword.getText())){
mens = "Campo senha em branco.\n";
mens += "Digite a senha";
} else {
return true;
}
ContentLayout.mensagemErro(mens);
return false;
}
// Disparo dos eventos dos botões
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource()==btncancel){
setResponse(false);
} else if (e.getSource()==btnok){
if (checkTextField()){
setResponse(logon());
if (!getResponse() && accessdenied >= 0) return;
} else {
return;
}
}
setVisible(false);
dispose();
}
private Boolean logon(){
UsuarioBean bean = new UsuarioBean();
bean.setLogin_usu(txtlogin.getText());
bean.setSenha_usu(Formatter.getMD5(txtpassword.getText()));
UsuarioDao dao = new UsuarioDao();
try {
dao.selectLogin(bean);
if ("".equals(bean.getNome_usu())){
verifyChances();
return false;
} else {
FramePrincipal.setUser_log(bean.getLogin_usu());
return true;
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
accessdenied = -1;
return false;
}
}
private void verifyChances(){
String ch;
if (accessdenied==0){
mens = "Voce não tem mais chances.\n";
mens += "O programa será fechado.";
} else {
if (accessdenied==1){
ch = " chance\n";
} else {
ch = " chances\n";
}
mens = "Voce só tem agora "+accessdenied+ch;
mens += "de digitar o login e senha corretamente.";
txtlogin.setText("");
txtpassword.setText("");
}
accessdenied--;
ContentLayout.mensagem(mens,"Acesso negado.");
}
@Override
public void keyTyped(KeyEvent e){
// Método não utilizado
}
@Override
public void keyPressed(KeyEvent e){
if (e.getKeyCode()==KeyEvent.VK_ENTER){
if (e.getSource()==txtlogin){
txtpassword.requestFocusInWindow();
} else if (e.getSource()==txtpassword){
btnok.doClick();
}
}
}
@Override
public void keyReleased(KeyEvent e) {
txtlogin.setText(txtlogin.getText().toUpperCase());
}
public Boolean getResponse() {
return response;
}
public void setResponse(Boolean response) {
this.response = response;
}
}