Sempre que coloco num JFrame uma JTable, ocorre o seguinte erro:
29/02/2008 15:20:37 org.jdesktop.application.SessionStorage restoreTree
WARNING: No saved state for javax.swing.JTable[debito,0,0,571x240,alignmentX=0.0,alignmentY=0.0,border=,flags=251658568,maximumSize=,minimumSize=,preferredSize=,autoCreateColumnsFromModel=true,autoResizeMode=AUTO_RESIZE_SUBSEQUENT_COLUMNS,cellSelectionEnabled=false,editingColumn=-1,editingRow=-1,gridColor=javax.swing.plaf.ColorUIResource[r=128,g=128,b=128],preferredViewportSize=java.awt.Dimension[width=450,height=400],rowHeight=16,rowMargin=1,rowSelectionAllowed=true,selectionBackground=javax.swing.plaf.ColorUIResource[r=49,g=106,b=197],selectionForeground=javax.swing.plaf.ColorUIResource[r=255,g=255,b=255],showHorizontalLines=true,showVerticalLines=true]
Já tentei de tudo… deletar as JTables, adicionar de novo, mas sempre dá esse erro pra todas as JTables no código… ;/
Vou agora mostrar como está o meu código…
Arquivo MagiaApp.java (Chama a janela Login.java)
/*
* MagiaApp.java
*/
package magia;
import org.jdesktop.application.Application;
import org.jdesktop.application.SingleFrameApplication;
/**
* The main class of the application.
*/
public class MagiaApp extends SingleFrameApplication {
static javax.swing.JFrame telaFunc;
static javax.swing.JFrame telaAdmin;
static javax.swing.JDialog telaLogin; // Referência estática, pode levar um dispose a partir de outra classe
static SQL bd = new SQL("pgsql"); // Para manter conexão sempre ativa
/**
* At startup create and show the main frame of the application.
*/
@Override protected void startup() {
show(telaLogin = new Login());
bd.connect("localhost", "postgres", "senha", "magia");
}
public static void telaFunc(String login, String senha) {
telaLogin.dispose();
telaFunc = new Func(login,senha);
telaFunc.setLocationRelativeTo(Application.getInstance(MagiaApp.class).getMainFrame());
Application.getInstance(MagiaApp.class).show(telaFunc);
}
public static void telaAdmin(String login, String senha) {
telaLogin.dispose();
telaAdmin = new Admin(login,senha);
telaAdmin.setLocationRelativeTo(Application.getInstance(MagiaApp.class).getMainFrame());
Application.getInstance(MagiaApp.class).show(telaAdmin);
}
/**
* This method is to initialize the specified window by injecting resources.
* Windows shown in our application come fully initialized from the GUI
* builder, so this additional configuration is not needed.
*/
@Override protected void configureWindow(java.awt.Window root) {
}
/**
* A convenient static getter for the application instance.
* @return the instance of MagiaApp
*/
public static MagiaApp getApplication() {
return Application.getInstance(MagiaApp.class);
}
public static void disposeTelaLogin() {
telaLogin.dispose();
}
/**
* Main method launching the application.
*/
public static void main(String[] args) {
launch(MagiaApp.class, args);
}
}
Agora a janela Login.java
/*
* Login.java
*
* Created on 27 de Fevereiro de 2008, 00:41
*/
package magia;
//import org.jdesktop.application.Action;
/**
*
* @author Winxp
*/
public class Login extends javax.swing.JDialog {
/** Creates new form Login */
public Login() {
super();
//super(parent, modal);
initComponents();
// Conexão inicial com o Banco de dados..
//bd.connect("localhost", "postgres", "senha", "magia");
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
tipo = new javax.swing.ButtonGroup();
ok = new javax.swing.JButton();
sair = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
login = new javax.swing.JTextField();
senha = new javax.swing.JPasswordField();
jPanel2 = new javax.swing.JPanel();
func = new javax.swing.JRadioButton();
admin = new javax.swing.JRadioButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(magia.MagiaApp.class).getContext().getResourceMap(Login.class);
setTitle(resourceMap.getString("Form.title")); // NOI18N
setAlwaysOnTop(true);
setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
setLocationByPlatform(true);
setName("Form"); // NOI18N
setResizable(false);
ok.setText(resourceMap.getString("ok.text")); // NOI18N
ok.setName("ok"); // NOI18N
ok.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okActionPerformed(evt);
}
});
javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(magia.MagiaApp.class).getContext().getActionMap(Login.class, this);
sair.setAction(actionMap.get("quit")); // NOI18N
sair.setText(resourceMap.getString("sair.text")); // NOI18N
sair.setToolTipText(resourceMap.getString("sair.toolTipText")); // NOI18N
sair.setName("sair"); // NOI18N
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("jPanel1.border.title"))); // NOI18N
jPanel1.setName("jPanel1"); // NOI18N
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
jLabel1.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
jLabel1.setName("jLabel1"); // NOI18N
jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N
jLabel2.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
jLabel2.setName("jLabel2"); // NOI18N
login.setText(resourceMap.getString("login.text")); // NOI18N
login.setName("login"); // NOI18N
login.setNextFocusableComponent(senha);
senha.setText(resourceMap.getString("senha.text")); // NOI18N
senha.setName("senha"); // NOI18N
senha.setNextFocusableComponent(ok);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 50, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(senha, javax.swing.GroupLayout.DEFAULT_SIZE, 134, Short.MAX_VALUE)
.addComponent(login, javax.swing.GroupLayout.DEFAULT_SIZE, 134, Short.MAX_VALUE))
.addGap(14, 14, 14))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(login, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(senha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("jPanel2.border.title"))); // NOI18N
jPanel2.setName("jPanel2"); // NOI18N
tipo.add(func);
func.setSelected(true);
func.setText(resourceMap.getString("func.text")); // NOI18N
func.setName("func"); // NOI18N
tipo.add(admin);
admin.setText(resourceMap.getString("admin.text")); // NOI18N
admin.setName("admin"); // NOI18N
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(func)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 16, Short.MAX_VALUE)
.addComponent(admin)
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(admin)
.addComponent(func))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(52, 52, 52)
.addComponent(ok)
.addGap(30, 30, 30)
.addComponent(sair)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(ok)
.addComponent(sair))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void okActionPerformed(java.awt.event.ActionEvent evt) {
String bdlogin = login.getText().trim().replaceAll("'", "''"); // Pega login e proteje de injections
char[] bdsenha = senha.getPassword(); // Pega Senha
String pgsenha = ""; // Variavel da senha completa
// Transforma a senha em String
for (int i=0; i<bdsenha.length ; i++) { pgsenha = pgsenha+bdsenha[i]; }
pgsenha.trim().replaceAll("'", "''");
//Verifica o botao Selecionado - funcionário ou Administrador
if (func.isSelected()) {
bd.query("SELECT * FROM usuarios WHERE login='"+bdlogin+"' AND senha='"+pgsenha+"';");
if (bd.numRows()>0) {
telaFunc(bdlogin,pgsenha);
}
else {
javax.swing.JOptionPane.showMessageDialog(MagiaApp.telaLogin, "Usuário ou senha de Funcionário inválida");
}
}
else {
bd.query("SELECT * FROM admin WHERE login='"+bdlogin+"' AND senha='"+pgsenha+"';");
if (bd.numRows()>0) {
telaAdmin(bdlogin,pgsenha);
}
else {
javax.swing.JOptionPane.showMessageDialog(MagiaApp.telaLogin, "Usuário ou senha da Administração inválida");
}
}
}
//@Action
public void telaFunc(String login, String senha) {
//telaFunc = new Func(login,senha); // Envia comandos
//telaFunc.setLocationRelativeTo(MagiaApp.getApplication().getMainFrame());
//MagiaApp.disposeTelaLogin();
//MagiaApp.getApplication().show(telaFunc);
MagiaApp.telaFunc(login, senha);
}
//@Action
public void telaAdmin(String login, String senha) {
//telaAdmin = new Admin(login,senha); // Envia comandos
//telaAdmin.setLocationRelativeTo(MagiaApp.getApplication().getMainFrame());
//MagiaApp.disposeTelaLogin(); //setvisible false em vez do dispose
//MagiaApp.getApplication().show(telaAdmin);
MagiaApp.telaAdmin(login, senha);
}
//SQL bd = new SQL("pgsql");
SQL bd = MagiaApp.bd; // Resgata conexão
//private javax.swing.JFrame telaFunc;
//private javax.swing.JFrame telaAdmin;
// Variables declaration - do not modify
private javax.swing.JRadioButton admin;
private javax.swing.JRadioButton func;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JTextField login;
private javax.swing.JButton ok;
private javax.swing.JButton sair;
private javax.swing.JPasswordField senha;
private javax.swing.ButtonGroup tipo;
// End of variables declaration
}
E por fim… uma das janelas que da erro no JTable… que é a ultima janela a ser chamada… é a Admin.java
explicando: o MagiaApp.java chama a janela login do Login.java, uma jdialog… ai se o login tiver certo… essa janela login se fecha e abre a janela Admin.java
segue o código do Admin.java, que da o WARNING descrito ao por as JTables…
/*
* Admin.java
*
* Created on 28 de Fevereiro de 2008, 02:20
*/
package magia;
import org.jdesktop.application.*;
/**
*
* @author Winxp
*/
public class Admin extends javax.swing.JFrame {
SQL bd = MagiaApp.bd; // Resgata conexão
/** Creates new form Admin */
public Admin(String login, String senha) {
initComponents();
nomeadmin.setText(login);
bd.query("SELECT * FROM admin WHERE login='"+login+"' AND senha='"+senha+"';");
if (bd.numRows()<1) {
javax.swing.JOptionPane.showMessageDialog(MagiaApp.telaAdmin, "Usuário ou senha da Administração inválida");
System.exit(0);
}
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
nomeadmin = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
try {
teste =(javax.swing.JTable)java.beans.Beans.instantiate(getClass().getClassLoader(), "magia.Admin_teste");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (java.io.IOException e) {
e.printStackTrace();
}
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenu2 = new javax.swing.JMenu();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(magia.MagiaApp.class).getContext().getResourceMap(Admin.class);
setTitle(resourceMap.getString("Form.title")); // NOI18N
setMinimumSize(new java.awt.Dimension(800, 600));
setName("Form"); // NOI18N
setResizable(false);
jPanel1.setBackground(resourceMap.getColor("jPanel1.background")); // NOI18N
jPanel1.setBorder(new javax.swing.border.MatteBorder(null));
jPanel1.setName("jPanel1"); // NOI18N
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
jLabel1.setName("jLabel1"); // NOI18N
nomeadmin.setFont(resourceMap.getFont("nomeadmin.font")); // NOI18N
nomeadmin.setForeground(resourceMap.getColor("nomeadmin.foreground")); // NOI18N
nomeadmin.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
nomeadmin.setText(resourceMap.getString("nomeadmin.text")); // NOI18N
nomeadmin.setName("nomeadmin"); // NOI18N
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(321, 321, 321)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(nomeadmin, javax.swing.GroupLayout.PREFERRED_SIZE, 183, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(218, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(nomeadmin, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
);
jScrollPane1.setName("jScrollPane1"); // NOI18N
jScrollPane1.setViewportView(teste);
jMenuBar1.setName("jMenuBar1"); // NOI18N
jMenu1.setText(resourceMap.getString("jMenu1.text")); // NOI18N
jMenu1.setName("jMenu1"); // NOI18N
jMenuBar1.add(jMenu1);
jMenu2.setText(resourceMap.getString("jMenu2.text")); // NOI18N
jMenu2.setName("jMenu2"); // NOI18N
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addGap(72, 72, 72)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(276, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(102, 102, 102)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 188, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(264, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel nomeadmin;
private javax.swing.JTable teste;
// End of variables declaration
}
Explicando como funciona meu sistema para facilitar o entendimento:
-A partir do MagiaApp.java gero algumas variaveis estáticas, como o telaLogin e o telaAdmin, assim posso fechar a janela de login a partir de outras janelas
-O MagiaApp.java ao iniciar, chama o Login.java que é uma JDialog, ai a pessoa entra com usuario e senha…
- Se senha e usuario corretos, depois do actionperformed do botão OK… o Login.java chama o metodo estatico de MagiaApp “para se fechar” e abrir a janela presente no Admin.java