Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Colocar un JPanel en el contructor o en main

Hola tengo una duda, y es la siguiente. Yo cuando agrego un JPanel, dentro de un JFrame, desde el constructor de mi JFrame, hace que se dibuje lo que hay en JPanel (en este caso un texto). Pero cuando agrego el JPanel en el main, luego de haber creado una instancia de JFrame, no se muestra. ¿Cuál es el problema?

Mi primer código: Colocando el JPanel en el constructo de mi JFrame:


import java.awt.Canvas;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;

import javax.swing.*;


public class Mouse2 {

public static void main(String[] args) {

Frame2 frame1 = new Frame2();

//frame1.add(new Canvas2());

}
}


@SuppressWarnings("serial")
class Frame2 extends JFrame{

Canvas2 canvas1 = new Canvas2();

public Frame2(){

JFrame a = new JFrame("Ventana");

a.setBounds(100, 100, 250, 200);
a.setVisible(true);
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
a.setResizable(false);

a.add(canvas1);
}
}

@SuppressWarnings("serial")
class Canvas2 extends Canvas{


public void paint(Graphics g){
g.drawString("Hola mundo!", 10, 20);

}

}

Mi segundo codigo: Colocando el JPanel luego de creada la instacia de JFrame, en el main.


import java.awt.Canvas;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;

import javax.swing.*;


public class Mouse2 {

public static void main(String[] args) {

Frame2 frame1 = new Frame2();

frame1.add(new Canvas2());

}
}


@SuppressWarnings("serial")
class Frame2 extends JFrame{

//Canvas2 canvas1 = new Canvas2();

public Frame2(){

JFrame a = new JFrame("Ventana");

a.setBounds(100, 100, 250, 200);
a.setVisible(true);
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
a.setResizable(false);

//a.add(canvas1);
}
}

@SuppressWarnings("serial")
class Canvas2 extends Canvas{


public void paint(Graphics g){
g.drawString("Hola mundo!", 10, 20);

}

}

mi duda, es porqué, se muestra en el primero el texto y no en el segundo?

agosto 22, 2015 | Registered CommenterCat

Hola.

En la clase Frame2, creas un frame en su constructor.

JFrame a = new JFrame("Ventana");

a.setBounds(100, 100, 250, 200);
a.setVisible(true);
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
a.setResizable(false);

este frame a, es distinto al Frame2, el frame2 no se muestra porque tu no le has dicho que se muestre.

En el segundo caso haces lo mismo solo que ahora canvas se lo añades a frame2 pero este no es visible asi que no ves el mensaje, y la ventana que ves sigue siendo la de a.

para corroborar lo que te digo has esto.


import java.awt.Canvas;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;

import javax.swing.*;


public class Mouse2 {

public static void main(String[] args) {

Frame2 frame1 = new Frame2();


frame1.add(new Canvas2());
frame1.setBounds(100, 100, 250, 200);
frame1.setVisible(true);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setResizable(false);
frame1.setTitle("principal");

}
}


@SuppressWarnings("serial")
class Frame2 extends JFrame{

Canvas2 canvas1 = new Canvas2();

public Frame2(){

JFrame a = new JFrame("Ventana");

a.setBounds(100, 100, 250, 200);
a.setVisible(true);
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
a.setResizable(false);

a.add(canvas1);
}
}

@SuppressWarnings("serial")
class Canvas2 extends Canvas{


public void paint(Graphics g){
g.drawString("Hola mundo!", 10, 20);

}

}

cuando ejecutes el código veras dos ventanas casi idénticas, con la diferencia que una tendrá el titulo de Ventana, y la otra de Principal. como veras una es el frame a, y el otro es Frame2.

saludos

agosto 22, 2015 | Registered Commenterjhosep

Ahh, ya, ahora me doy cuenta del error, estaba haciendo una instancia dentro de lo que ya sería un JFrame !
Gracias por responder! :D

agosto 22, 2015 | Registered CommenterCat