Java - como dibujar en 2 JPanels?

 
Vista:

como dibujar en 2 JPanels?

Publicado por yamil_B (10 intervenciones) el 05/06/2006 18:10:59
Como puedo utilizar gráficos con DrawImage y la clase Swing, en 2 JPanels a la vez?
Solo me sale graficarlo en uno solo y los ejemplos que encuentro en Internet siempre muestran soluciones con un solo JPanels
Estoy queriendo hacer un juego de cartas con varios JPanels y JInternalFrame a la vez
Si alguien pudiera ayudarme se lo agradecería mucho!
Yamil_B
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:como dibujar en 2 JPanels?

Publicado por Juan (131 intervenciones) el 05/06/2006 18:52:34
Pero en tu codigo mandas a pintar en los dos paneles? A la vez jamas podrias hacerlo en un procesador, pero podrias hacer que las tareas fueran gemelas, cuando mandas a hacer algo en un panel lo haces en el otro y deberia funcionar
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:como dibujar en 2 JPanels?

Publicado por yamil_B (10 intervenciones) el 05/06/2006 21:38:45
disculpa, no lo comprendo. Intento y no me funciona. Aca te mando parte del codigo de la clase principal. donde deberia escribir "la tarea gemela"?
gracias, yamil

class PanelA extends JPanel {
PanelA() {
JPanel panelA = new JPanel();
...
}
}
class PanelB extends JPanel {
PanelB() {
JPanel panelB = new JPanel();
...
}
}
public class Principal2 extends Canvas implements Stage {
public BufferStrategy strategy;
private SpriteCache spriteCache;
private ArrayList actors;
public JFrame ventana = new JFrame();
PanelA panelA = new PanelA();
PanelB panelB = new PanelB();
public Principal2() {
spriteCache = new SpriteCache();
setBounds(0,0,Stage.WIDTH,Stage.HEIGHT);
Container contentPane = ventana.getContentPane();
contentPane.add(panelA, BorderLayout.CENTER);
contentPane.add(panelB, BorderLayout.EAST);
ventana.add(this);
ventana.setBounds(0,0,Stage.WIDTH,Stage.HEIGHT);
ventana.pack();
ventana.setVisible(true);
ventana.addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
ventana.setResizable(false);
createBufferStrategy(2);
strategy = getBufferStrategy();
}
public void inicioWorld() {
actors = new ArrayList();
for (int i = 0; i < 7; i++){
Cartas c = new Cartas(this);
...
actors.add(c);
}
}
...
public void paintWorld() {
Graphics2D g = (Graphics2D)strategy.getDrawGraphics();
g.setColor(Color.black);
g.fillRect(0,0,getWidth(),getHeight());
for (int i = 0; i < actors.size(); i++) {
Actor c = (Actor)actors.get(i);
c.paint(g);
}
strategy.show();
}
public SpriteCache getSpriteCache() {
return spriteCache;
}
public void game() {
inicioWorld();
while (isVisible()) {
...
paintWorld();
}
}
public static void main(String[] args) {
Principal2 inv = new Principal2();
inv.game();
}
}
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
sin imagen de perfil

RE:como dibujar en 2 JPanels?

Publicado por chuidiang (950 intervenciones) el 06/06/2006 13:45:52
Hola:

No sé si está todo el codigo (me falta la clase Cartas), pero veo mucho lio.

La clase PanelA en su constructor tiene un JPanel local al constructor. ¿para qué?. Los componentes o lo que sea que pintes no puedes meterlo dentro de esa variable local, ya que lo pierdes todo, salvo que estes metiendo ese panelA dentro de la clase PanelA con un add(panelA).

Para dibujar, en general, hay que heredar de un componente y redefinir el metodo paint(Grapichs). Debes dibujar en ese Graphics que te pasan.

Si quieres dibujar sobre un BufferedImage, puedes hacerlo, pero luego en el método paint(Graphics) del componente que sea debes dibujar la imagen sobre el componente con un g.drawImage(...);

El mismo BufferedImage puedes dibujarlo sin problemas en dos paneles siempre y cuando respetes esas normas. Puede ser algo asi

class PanelA extends Panel
{
private BufferedImage imagen;
public PanelA (BufferedImage imagen)
{
this.imagen=imagen;
}
public void paint (Graphics g)
{
g.drawImage(imagen, ....);
}
}

El PanelB sería igual. Simplemente pásales el mismo BuffferedImage a los dos en el constructor.

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

RE:como dibujar en 2 JPanels?

Publicado por yamil_B (10 intervenciones) el 06/06/2006 22:22:31
Muchas gracias chuidiang por contestarme. Como veras soy nuevo en esto. Entiendo lo que hacia mal con JPanel. tambien entiendo la logica de utilizar BufferedImage dentro de cada JPanel, pero no logro resolver en la practica: ¿como construir un Canvas para llamar desde alli a los metodos de los JPanels? Para simplificarlo, como seria el codigo con un solo JPanel? Que me faltaria agregar en este codigo?


class PanelA extends JPanel{
private BufferedImage imagen;
public PanelA(BufferedImage imagen) {
this.imagen=imagen;
}
public void paint(Graphics g) {
g.drawImage(imagen,...);
}
}

public class Practica2 extends Canvas {
static JFrame ventana = new JFrame();
PanelA panelA;

Practica2(){
setBounds(0,0,800,600);
ventana.getContentPane().add(panelA);
ventana.setBounds(0,0,800,600);
ventana.setVisible(true);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public BufferedImage loadImage(String nombre) {...}

public static void main(String s[]) {
Practica2 prac = new Practica2();
}
}
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:como dibujar en 2 JPanels?

Publicado por Manuel C. (11 intervenciones) el 07/06/2006 05:25:05
Para dibujar en un JPanel o en cualquier compomente, tienes que sobreescribir el metodo paint() para ese componente. Yo no entiendo el por que drean una clase y extienden en ella las caracteristicas en este caso de la clase JPanel.

Como dibujar sobre un JPanel pues primero creas el objeto del tipo JPanel

JPanle miPanel;

Luego creas la instancia del objeto, y enseguida dentro de esta declaracion sobreescibes el metodo paint. que sera exclusivo para este panel en particular

miPanel = new JPanel() {
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
dibujar(g2);
} // Fin de paint
}; // Fin de la declaracion de miPanel

cuando quieras dibujar solo llamas al metodo paint del panel

Graphics g = miPanelD.getGraphics();
miPanelD.paint(g);

dibujar(g) es el metodo a usar para hace todo el trabajo de graficado.
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
sin imagen de perfil

RE:como dibujar en 2 JPanels?

Publicado por chuidiang (950 intervenciones) el 07/06/2006 08:22:17
Hola:

Puedes dibujar sobre cualquier componente java, simplemente hereda de el y redefine paint().

El componente más adecuado para dibujar sobre el es el java.awt.Canvas puesto que esta pensado para ello. La única ventaja es que Canvas es una clase más ligera. Por ejemplo, JPanel tiene dentro código para soportar un Layout, codigo para redibujar botones, etc, etc. Por ello, salvo que necesites JPanel por algún motivo, es mejor usar Canvas.

En vez de PanelA y PanelB, haz CanvasA y CanvasB que hereden de Canvas.

Tu clase principal no es necesario que herede de nadie. En el constructor pon algo como esto

public Practica2()
{
JFrame v = new JFrame();
CanvasA ca = new CanvasA (imagen);
CanvasB cb = new CanvasB(imagen);
v.getContentPane().add(ca, BorderLayout.CENTER);
v.getContentPane().add(cb, BorderLayout.SOUTH);
v.setSize(ancho,alto);
v.setVisible(true);
v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

Estoy prsuponiendo que la imagen ya está cargada.
Los canvas ponlos donde quieras dentro del JFrame. Yo he puesto center y south por poner algo.
ancho y alto son los que desees para tu ventana.
La ultima linea hace que el programa salga cuando das a la x de la ventana.

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

RE:como dibujar en 2 JPanels?

Publicado por yamil_B (10 intervenciones) el 07/06/2006 15:38:23
Gracias juan, manuel C y chuidiang!
Lo he logrado AL FIN desde la utilización de JPanel, voy a ver que pasa y si me conviene usas directamente Canvas.
Voy a ejercitar desde estos ejemplos. Muy buena info!
yamil_B
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