Foros del Web » Programación para mayores de 30 ;) » Java »

Manejo de 2 o mas JFrames

Estas en el tema de Manejo de 2 o mas JFrames en el foro de Java en Foros del Web. Tengo que hacer un programa en 2 JFrames. El primero Tiene que tener un JPanel que muestre una figura drawOval, drawRect.. etc. El segundo Jframe ...
  #1 (permalink)  
Antiguo 05/09/2012, 16:26
Avatar de Lawnder00  
Fecha de Ingreso: septiembre-2012
Mensajes: 5
Antigüedad: 11 años, 8 meses
Puntos: 0
Pregunta Manejo de 2 o mas JFrames

Tengo que hacer un programa en 2 JFrames.
El primero Tiene que tener un JPanel que muestre una figura drawOval, drawRect.. etc.
El segundo Jframe tiene que tener 3 Botones uno que inicie dibujando la figura y otros 2 que la muevan hacia adelante y hacia atras en "X"

el problema es que me marca un error al precionar los botones creo que no se comunican las ventanas. dejo el codigo de las 2 clases.


import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Ventana extends JFrame implements ActionListener{
public JButton boton1,boton2,boton3;
public JPanel panel;
public JTextField tex;
public String n;
public int n2=0;
public static int x1=100, x2=105, x3=130;
public static void main(String[] args){
Ventana macro = new Ventana();
macro.setSize(400,450);
macro.createGUI();
macro.setVisible(true);
macro.setTitle("Carrito Chingon");
Ventana macro2 =new Ventana();
macro2.setSize(400,80);
macro2.createGUI2();
macro2.setVisible(true);
macro2.setTitle("Controles");
}
public void createGUI2(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container window2 = getContentPane();
window2.setLayout(new FlowLayout());
setLocation(500,500);
boton3 = new JButton("Carro");
window2.add(boton3);
boton3.addActionListener(this);
boton1 = new JButton("Adelante");
window2.add(boton1);
boton1.addActionListener(this);
boton2 = new JButton("Atras");
window2.add(boton2);
boton2.addActionListener(this);
}
public void createGUI(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container window = getContentPane();
window.setLayout(new FlowLayout());
setLocation(500,40);
panel = new JPanel();
panel.setPreferredSize(new Dimension(350,350));
panel.setBackground(Color.lightGray);
window.add(panel);
}
@Override
public void actionPerformed(ActionEvent event){
Object origen = event.getSource();
if(origen==boton1)
{
Graphics papel = panel.getGraphics();
papel.setColor(Color.lightGray);
papel.fillRect(0, 0, 350, 350);
DibujoC Dc2 = new DibujoC();
Dc2.MoverI(panel);
}
else if(origen==boton3){

DibujoC Dc = new DibujoC();
Dc.Carro(panel);
}
else if(origen==boton2){
Graphics papel = panel.getGraphics();
papel.setColor(Color.lightGray);
papel.fillRect(0, 0, 350, 350);
DibujoC Dc3 = new DibujoC();
Dc3.MoverD(panel);
}
}}



import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;


public class DibujoC extends Ventana {
public DibujoC(){

}
public void Carro(JPanel panel){
Graphics papel = panel.getGraphics();
papel.drawRect(Ventana.x1, 100, 55, 30 );
papel.fillOval(Ventana.x2, 120, 20, 20 );
papel.fillOval(Ventana.x3, 120, 20, 20 );

}
public void MoverI(JPanel panel){
x1=x1-1; x2=x2-1; x3=x3-1;
Graphics papel = panel.getGraphics();
papel.drawRect(Ventana.x1, 100, 55, 30 );
papel.fillOval(Ventana.x2, 120, 20, 20 );
papel.fillOval(Ventana.x3, 120, 20, 20 );
}
public void MoverD(JPanel panel){
x1=x1+1; x2=x2+1; x3=x3+1;
Graphics papel = panel.getGraphics();
papel.drawRect(Ventana.x1, 100, 55, 30 );
papel.fillOval(Ventana.x2, 120, 20, 20 );
papel.fillOval(Ventana.x3, 120, 20, 20 );

}
}


Espero me puedan ayudar Gracias
  #2 (permalink)  
Antiguo 05/09/2012, 17:07
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Manejo de 2 o mas JFrames

Claro, por que cuando se crea la ventana de abajo, el metodo que crea el panel no se ejecuta, por lo tanto panel equivale a null.

Lo que debes hacer es separar cada una de esas ventanas en clases diferentes y pasar una instancia de la ventana dependiente a la que ejecutara las acciones.

VentanaPanel vPanel = new VentanaPanel();
VentanaBotones vBotones = new VentanaBotones(vPanel);

Asi cuando se invoque el actionPerformed de VentanaBotones, tienes una instancia del panel pasada por el constructor y puedes por lo tanto manipular su panel.
  #3 (permalink)  
Antiguo 05/09/2012, 17:19
Avatar de Lawnder00  
Fecha de Ingreso: septiembre-2012
Mensajes: 5
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Manejo de 2 o mas JFrames

Cita:
Iniciado por Ronruby Ver Mensaje
Claro, por que cuando se crea la ventana de abajo, el metodo que crea el panel no se ejecuta, por lo tanto panel equivale a null.

Lo que debes hacer es separar cada una de esas ventanas en clases diferentes y pasar una instancia de la ventana dependiente a la que ejecutara las acciones.

VentanaPanel vPanel = new VentanaPanel();
VentanaBotones vBotones = new VentanaBotones(vPanel);

Asi cuando se invoque el actionPerformed de VentanaBotones, tienes una instancia del panel pasada por el constructor y puedes por lo tanto manipular su panel.
Muchas gracias, lo programare a ver que tal me va :)
  #4 (permalink)  
Antiguo 05/09/2012, 17:56
Avatar de Lawnder00  
Fecha de Ingreso: septiembre-2012
Mensajes: 5
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Manejo de 2 o mas JFrames

Cita:
Iniciado por Ronruby Ver Mensaje
Claro, por que cuando se crea la ventana de abajo, el metodo que crea el panel no se ejecuta, por lo tanto panel equivale a null.

Lo que debes hacer es separar cada una de esas ventanas en clases diferentes y pasar una instancia de la ventana dependiente a la que ejecutara las acciones.

VentanaPanel vPanel = new VentanaPanel();
VentanaBotones vBotones = new VentanaBotones(vPanel);

Asi cuando se invoque el actionPerformed de VentanaBotones, tienes una instancia del panel pasada por el constructor y puedes por lo tanto manipular su panel.
Sigue sin funcionar o tal ves no supe como codificar lo que me dijiste soy nuevo en java :( hice esto


import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Ventana extends JFrame implements ActionListener{
public JButton boton1,boton2,boton3;
public JPanel panel;
public static int x1=100, x2=105, x3=130;
public static void main(String[] args){
VentanaI macro = new VentanaI();
macro.setSize(400,450);
macro.createGUI();
macro.setVisible(true);
macro.setTitle("Carrito Chingon");
VentanaB macro2 = new VentanaB();
macro2.setSize(400,80);
macro2.createGUI2();
macro2.setVisible(true);
macro2.setTitle("Controles");
}
@Override
public void actionPerformed(ActionEvent event){

Object origen = event.getSource();
if(origen==boton1)
{
Graphics papel = panel.getGraphics();
papel.setColor(Color.lightGray);
papel.fillRect(0, 0, 350, 350);
DibujoC Dc2 = new DibujoC();
Dc2.MoverI(panel);
}
else if(origen==boton3){

DibujoC Dc = new DibujoC();
Dc.Carro(panel);
}
else if(origen==boton2){
Graphics papel = panel.getGraphics();
papel.setColor(Color.lightGray);
papel.fillRect(0, 0, 350, 350);
DibujoC Dc3 = new DibujoC();
Dc3.MoverD(panel);
}
}
}



import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JPanel;


public class VentanaI extends Ventana{
public void createGUI(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container window = getContentPane();
window.setLayout(new FlowLayout());
setLocation(500,40);
panel = new JPanel();
panel.setPreferredSize(new Dimension(350,350));
panel.setBackground(Color.lightGray);
window.add(panel);
}
}





import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JButton;


public class VentanaB extends Ventana {
public void createGUI2(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container window2 = getContentPane();
window2.setLayout(new FlowLayout());
setLocation(500,500);
boton3 = new JButton("Carro");
window2.add(boton3);
boton3.addActionListener(this);
boton1 = new JButton("Adelante");
window2.add(boton1);
boton1.addActionListener(this);
boton2 = new JButton("Atras");
window2.add(boton2);
boton2.addActionListener(this);
}
}


La clase DibujoC la deje igual

Etiquetas: botones, jbutton, jframes, jpanel
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:55.