Java - jLabel, settext en tiempo de ejecución

   
Vista:
Imágen de perfil de Josep

jLabel, settext en tiempo de ejecución

Publicado por Josep (8 intervenciones) el 22/09/2007 01:38:00
Hola, aunque parece claro no entiendo el error: "non-static variable jLabel1 cannot be referenced from a static context", no se puede asignar texto a un jLabel por programa?

Disculpad pero estoy empezando y ...

Un saludo, adjunto el código a continuación

/*
* Principal.java
*/

package mipaquete;
import java.sql.*;

/**
* @author Josep
*/
public class Principal extends javax.swing.JFrame {

/** Creates new form Principal */
public Principal() {
initComponents();
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Principal().setVisible(true);
try
{
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=mibd.mdb";
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection (url, "", "");
jLabel1.setText("Bien");
}
catch (Exception e)
{
jLabel1.setText("Mal");
}
}

});
}

// Declaración de variables -no modificar
private javax.swing.JLabel jLabel1;
// Fin de declaración de variables

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:jLabel, settext en tiempo de ejecución

Publicado por chuidiang (949 intervenciones) el 22/09/2007 13:50:42
Hola:

Desde un método static -como es el main- no puedes llamar a un atributo de la clase que no es static. El main existe aunque no hagas el new de la clase. Es más, por muchos news que hagas de la clase, sólo existe un main.

En cambio, el JLabel, al no ser static, no existe hasta que hagas un new de la clase. Además, si haces varios new, existirán varios JLable, uno por cada new.

Por eso, desde el main no puedes llamar al JLabel que no es static, ya que puede que no exista y si existe -porque hayas hecho el new- no se sabe a cual de los posibles news corresponde.

La solucion es hacer static también el JLabel

private static javax.swing.JLabel jLabel1;

o bien, en el main() hacer un new de la clase, guardarlo en una variable y luego usarlo.

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {

// Guardas el new en una variable
Principal variable= new Principal().setVisible(true);

try
{
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=mibd.mdb";
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection (url, "", "");

// Usas el jlabel de la variable que has instanciado.
variable.jLabel1.setText("Bien");

}
catch (Exception e)
{
jLabel1.setText("Mal");
}
}

De todas formas, lo mejor en el main() es simplemente hacer un new de la clase o poco más y dejar todo el código en el constructor o en algún método que pongas al efecto y que luego llames desde el main.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de alpepep

RE:jLabel, settext en tiempo de ejecución

Publicado por alpepep (8 intervenciones) el 22/09/2007 14:30:49
Vale, muchas gracias.

Como lo que quiero es aprender supongo que lo que tengo que trabajar es que el código para abrir la base de datos y los procesos previos (crear los resulset que luego se usarán en toda la aplicación, por ejemplo) esté en el constructor y/o en métodos específicos para cada uno de ellos, además como el 99 por ciento de lo que hago son aplicaciones que acceden a una o varias bases de datos, gestionar su actualización y realizar consultas sobre ellas también me interesa poder reutilizar código.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Josep

RE:jLabel, settext en tiempo de ejecución

Publicado por Josep (8 intervenciones) el 22/09/2007 14:41:45
Disculpad, Josep y alpepep somos la misma persona.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar