Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > invocar clase a Jframe

Hola , me gustaria hacerles una pregunta que creo que es muy basica , pero que aun despues de llevar un mes estudiando java , no consigo dominar .

La pregunta es , como poner unir las clases a las opciones de Jframe , es decir , por ejemplo poner el una Jframe con un boton , que al precionar ese boton , invoque a una clase ya creada por mi , por ejemplo saludo.class .

Gracias y disculpad mi ignorancia , aun soy muy novato

Saludos

diciembre 25, 2012 | Unregistered CommenterArmando

Necesitas agregar un action listener al botón, para que cuando lo presiones, se ejecute el código que quieras.

Aquí van unos enlaces sobre el asunto, que te serán de mucha utilidad:

http://docs.oracle.com/javase/tutorial/uiswing/components/button.html#abstractbutton
http://forum.codecall.net/topic/36468-javatutorial-make-your-button-work/
http://www.java2s.com/Tutorial/Java/0240__Swing/0100__JButton.htm

diciembre 26, 2012 | Registered Commenterchoces

Muchas gracias choces , me pondré a investigar esos enlaces y si os comentaré los avances.

Saludos

diciembre 26, 2012 | Unregistered CommenterArmando

Saludo , bueno , no se si es que soy un desesperado , pero no logro conseguir que me aga lo que deceo , he declarado un objeto , intentar añadir un actionlistener al boton para que me imprima el saludo de la clase Saludo.class , pero aun sigo sin poder , me podrían decir algún ejemplo o otra forma de aplicarlo ?

Gracias y saludos

diciembre 26, 2012 | Unregistered CommenterArmando

No te desesperes, que Swing no es fácil de usar.
Por qué no publicas tu código, que será más fácil que se te pueda ayudar, viendo lo que ya has hecho.

diciembre 26, 2012 | Registered Commenterchoces

clase saludo.java

import java.awt.event.ActionListener;
import javax.swing.JButton;

public class Saludo
{
public static void main (String args[])
{
System.out.println ("este es el texto que quiero que muestra al apretar el boton");
}
private ActionListener String;

void addActionListener(Class<Saludo> aClass) {
Saludo saludar = new Saludo();
saludar.addActionListener(aClass);
}

void addActionListener(Class<Saludo> aClass, JButton BotonSaludo) {
Saludo saludar = new Saludo();
BotonSaludo.addActionListener(null,);
}

}


clase VentanaP(jframe)

package Prueba1;
import java.awt.event.ActionListener;


/**
*
* @author maru
*/
public class VentanaP extends javax.swing.JFrame {
private ActionListener String;

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

/**
* 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.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

BotonSaludo = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

BotonSaludo.setText("saludame");
BotonSaludo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BotonSaludoActionPerformed(evt);
}
});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(130, 130, 130)
.addComponent(BotonSaludo, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(175, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(124, 124, 124)
.addComponent(BotonSaludo, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(130, Short.MAX_VALUE))
);

pack();
}// </editor-fold>

private void BotonSaludoActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Saludo saludar = new Saludo();
String saludo;
BotonSaludo.addActionListener(null);
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(VentanaP.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(VentanaP.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(VentanaP.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(VentanaP.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>

/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new VentanaP().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton BotonSaludo;
// End of variables declaration
}

la que quiero que me invoque al precionar el boton (BotonSaludo) es la clase saludo.java, es decir , la primera , pero me he echo un lio

diciembre 26, 2012 | Unregistered CommenterArmando

Mañana lo miro con calma, y te digo lo que haya encontrado.

diciembre 26, 2012 | Registered Commenterchoces

Voy a dividir la respuesta en dos partes, para que se entienda mejor.
Esta parte se refiere a la clase Saludo.

public class Saludo {

private final String saludo;

public Saludo() {
this("Este es el texto que quiero que muestre, por defecto, al apretar el botón");
}

public Saludo(String saludo) {
this.saludo = saludo;
}

/**
@return the saludo
*/
public String getSaludo() {
return saludo;
}
}

Solamente necesitas definirla así, porque no tiene ninguna relación con el modo gráfico: esta clase solo "sabe" construir saludos.
Le he declarado dos constructores, uno para un saludo por defecto, y otro para cualquier texto que quieras usar para saludar.
Lo verás más claro en la otra clase, VentanaP, que es quien usa esos saludos.

diciembre 27, 2012 | Registered Commenterchoces

Aquí veremos la solución al problema del Botón en la clase VentanaP.
Tienes correctamente creado el action listener del botón, excepto un detalle de estilo: los métodos deben comenzar con letra minúscula. Puesto que lo has declarado con el Matisse de NetBeans, lo mejor es que lo modifiques en el mismo Matisse.

1.- Elimina esta declaración, que no hace falta:
private ActionListener String;

2.- El método que ejecuta el action listener, lo he refactorizado así:

private void BotonSaludoActionPerformed(java.awt.event.ActionEvent evt) {
// Saludo por defecto
Saludo saludar = new Saludo();
System.out.println(saludar.getSaludo());
// nuevo saludo
saludar = new Saludo("Hola");
System.out.println(saludar.getSaludo());
}

Eso es todo lo que necesitas hacer. Cuando se pulsa el botón, se ejecuta este action listener:

BotonSaludo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BotonSaludoActionPerformed(evt);
}
});

que llama al método de más arriba. Ese método crea las instancias de Saludo, obtiene el mensaje que corresponde mediante su método público getSaludo(), y seguidamente lo imprime en la consola.

diciembre 27, 2012 | Registered Commenterchoces

Muchas gracias Choces , me has ayudado mucho , ahora mismo me pongo a las modificaciones que me has escrito y en breve mostrare los resultado . Una vez mas mil gracias , te debo una jej .

diciembre 27, 2012 | Unregistered CommenterArmando

Bieennn !!!! ha funcionado perfectamente choces !! eres mi nuevo ídolo jejeje , mil gracias y otra mil , la verdad que era una cosa relativamente sencilla y me había bloqueado totalmente . Deduzco de tus correcciones , que lo único que me hacia falta para poder hacer la función , era el saludar.getSaludo() y definirte en la clase saludo las variables String saludo .

Saludos y nuevamente mil gracias.

diciembre 27, 2012 | Unregistered CommenterArmando

No exactamente.
El problema principal con tu clase Saludo es que no tenía constructor propio (el compilador crea uno en estos casos, pero vacío), con lo que no hacía nada.
Si la declaras así.

public class Saludo {

public Saludo() {
System.out.println("Este es el texto que quiero que muestre, por defecto, al apretar el botón");
}

Y refactorizas tu método para el botón asÍ:

private void BotonSaludoActionPerformed(java.awt.event.ActionEvent evt) {
// Saludo por defecto
new Saludo();
}

debería funcionar igualmente. Sin embargo, esta manera de codificar es muy rígida: no te permite añadir con facilidad nuevas funciones a Saludo.

diciembre 27, 2012 | Registered Commenterchoces

De acuerdo , me queda por pulir muchas cosas por lo que veo , jeje

muchas gracias !

diciembre 27, 2012 | Unregistered CommenterArmando

Disculpen me puede explicar alguien porque no se puede invocar un método dentro del public static void main (String [] args){..} ???? de anrtemano gracias

marzo 27, 2013 | Unregistered CommenterWillianKnwles

Sí se pueden invocar métodos dentro de main; pero deben declararse static, puesto que main lo es.
En caso contrario el compilador lanzará un error:
"non-static method <nombre del método> cannot be referenced from a static context"

marzo 28, 2013 | Registered Commenterchoces