Java - Ayuda con frame

   
Vista:

Ayuda con frame

Publicado por advisor (2 intervenciones) el 11/01/2010 20:58:46
hola a todos, de antemano gracias la web del programador por crear una pagina en donde se puede aprender para aquellos que tienen iniciativa propia...saludos..
estoy aqui para ver si podian ayudarme con un prorama que estoy haciendo...veran tengo un problam dificil para mi, puesto que voy aprendiendo java...y aunque ya he buscado no he conseguido lograr que mi programa funcione, acontinuacion les dejo el codigo para que me digan en que estoy mal, o que es lo que debo de buscar. Cualquier aportacion (preferentemente positiva) es bienvenida...

import java.awt.event.*;
import javax.swing.*;
public class cuadro extends JFrame
{
JButton pared[][];
public static void main(String args[])
{
cuadro c=new cuadro();
c.ventana();
c.cuadritos();
}
public void ventana()
{
setBounds(50,50,210,280);
setTitle("Cuadritos");
setResizable(true);
setLayout(null);
pared=new JButton[10][10];
setVisible(true);
addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{System.exit(0);}
});
}
public void cuadritos()
{
for(int x=0;x<10;x++)
for(int y=0;y<10;y++)
{
pared[x][y]=new JButton();
pared[x][y].setBounds(x*20,y*20,20,20);
add(pared[x][y]);
}
JButton b=new JButton("Borrar");
b.setBounds(50,210,120,40);
b.addActionListener(new ButtonListener());
add(b);
}
public void borrar()
{
for(int x=0;x<10;x++)
for(int y=0;y<10;y++)
pared[x][y].setVisible(false);
}
}
class ButtonListener implements ActionListener
{
cuadro c=new cuadro();
ButtonListener()
{}
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("Borrar"))
c.borrar();
}
}
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:Ayuda con frame

Publicado por James (207 intervenciones) el 12/01/2010 02:15:54
Primero que nada para una proxima ocasion deberias primero indentar el codigo, luego especificar mejor cual es el problema? donde se origina? cuando y como sucede? y cosas por el estilo, aun asi el codigo que creas es bastante coherente pero tiene un par de errores que corregir, los colocare a continuacion con una explicaion de cada uno

public class Cuadro extends JFrame {

Esto no es un error pero por norma se escribe el nombre de un clase con mayuscula la primera letra podrias dejarlo como esta y fnciona, pero para una proxima evita escribirlo en minuscula

crea un contructor entonces coloca al menos esto

public Cuadro() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}

modifica el main ponlo asi, esto si es un error a pesar de funcionar como esta no es correcto pues una aplicacion siempre debe lanzarce desde el hilo de despacho principal para mantener un control adecuado de los procesos

public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Cuadro c = new Cuadro();
c.ventana();
c.cuadritos();
}
});
}

en el metodo ventana comenta o elimina estas lineas pues lo que hacen es lo mismo que lo que se especifica en la linea del constructor

addWindowListener(
new WindowAdapter() {

public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

al final del metodo cuadritos agreaga esta linea juesto antes de cerrar el metodo con eso aseguras que se actualiza correctamente la UI

SwingUtilities.updateComponentTreeUI(this);

modifica la clase ButtonListener, este en realidad es el error que tenias si solo corriges esto funcionaria como estaba pero no es correcto, deberia ser algo asi, la explicacion es simple pues tu debes borrar los botones de donde se lanzo la aplicacion mas tu aca creas otra instancia, totalmente incorrecto pues solo deberias referenciarla

class ButtonListener implements ActionListener {

Cuadro c;

ButtonListener(Cuadro temp) {
this.c = temp;
}

public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Borrar")) {
c.borrar();
}
}
}

por ultimo tambien debes modificar la linea de llamada al listener, la del metodo cuadritos, debe quedar algo asi con eso bastaria

b.addActionListener(new ButtonListener(this));

espero te haya quedado claro, en todo caso cualquier duda con gusto, Suerte
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

RE:Ayuda con frame

Publicado por Advisor (2 intervenciones) el 18/01/2010 00:07:11
Muchas gracias James, me ha sido de gran ayuda y utilidad tu informacion proporcionada, tomare muy en los consejos

saludos
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

RE:Ayuda con frame

Publicado por James (207 intervenciones) el 12/01/2010 02:16:45
Primero que nada para una proxima ocasion deberias primero indentar el codigo, luego especificar mejor cual es el problema? donde se origina? cuando y como sucede? y cosas por el estilo, aun asi el codigo que creas es bastante coherente pero tiene un par de errores que corregir, los colocare a continuacion con una explicaion de cada uno

public class Cuadro extends JFrame {

Esto no es un error pero por norma se escribe el nombre de un clase con mayuscula la primera letra podrias dejarlo como esta y fnciona, pero para una proxima evita escribirlo en minuscula

crea un contructor entonces coloca al menos esto

public Cuadro() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}

modifica el main ponlo asi, esto si es un error a pesar de funcionar como esta no es correcto pues una aplicacion siempre debe lanzarce desde el hilo de despacho principal para mantener un control adecuado de los procesos

public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Cuadro c = new Cuadro();
c.ventana();
c.cuadritos();
}
});
}

en el metodo ventana comenta o elimina estas lineas pues lo que hacen es lo mismo que lo que se especifica en la linea del constructor

addWindowListener(
new WindowAdapter() {

public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

al final del metodo cuadritos agreaga esta linea juesto antes de cerrar el metodo con eso aseguras que se actualiza correctamente la UI

SwingUtilities.updateComponentTreeUI(this);

modifica la clase ButtonListener, este en realidad es el error que tenias si solo corriges esto funcionaria como estaba pero no es correcto, deberia ser algo asi, la explicacion es simple pues tu debes borrar los botones de donde se lanzo la aplicacion mas tu aca creas otra instancia, totalmente incorrecto pues solo deberias referenciarla

class ButtonListener implements ActionListener {

Cuadro c;

ButtonListener(Cuadro temp) {
this.c = temp;
}

public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Borrar")) {
c.borrar();
}
}
}

por ultimo tambien debes modificar la linea de llamada al listener, la del metodo cuadritos, debe quedar algo asi con eso bastaria

b.addActionListener(new ButtonListener(this));

espero te haya quedado claro, en todo caso cualquier duda con gusto, Suerte
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