Jump to content

Recommended Posts

hola quiero cargar una clase de java que contenga una ventana a otra clases la cual tiene 2 contenedores y desde uno cargar al otro.

 

la idea es hacer esto:

thump_7707013ima.jpg

Edited by ynthn
Link to comment
Share on other sites

lo que quiero es cargar una nueva ventana en el contenedor derecho de la ventanapricipal.java mediante un botón del contenedor de la izquierda

es hacer algo parecido como los frame de html

quiero cargar una ventana en un contenedor sin cerrar la ventana actual solo actualizar el contenedor derecho

Link to comment
Share on other sites

Lo correcto sería que tuvieras una clase que contuviera el contenido de esa ventana en un contenedor, y ese contenedor llamarlo desde la otra ventana. Te extiendes de container y listo, y con un método cierras la otra ventana y creas un contenedor nuevo con el contenido de la otra ventana en tu ventana actual... voy a ver si hago un código a modo de ejemplo y te lo posteo, pero no me respondiste si ocupas swing ni tampoco me mostraste código, o no tienes nada implementado?

 

 

EDIT: Acá el código como prometí

 

app.java

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.BoxLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class app {

private window_container contentPane;
private JFrame frame;
private window win;
private boolean window_added;
public static void main(String[] args) {
 EventQueue.invokeLater(new Runnable() {
  public void run() {
   try {
 app window = new app();
 window.frame.setVisible(true);
   } catch (Exception e) {
 e.printStackTrace();
   }
  }
 });
}

public app() {
 initialize();
}

private void initialize() {
 window_added = false;
 frame = new JFrame("Ventana principal");
 win = new window();
 frame.setBounds(100, 100, 500, 300);
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.X_AXIS));

 JButton btnAddWindow = new JButton("Add window");
 btnAddWindow.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent arg0) {
   add_pane();
   //FIXME: pequeño hack para redibujar el jframe
   frame.setSize(500,401);
   frame.setSize(500,400);
   //no encontré otra forma de hacerlo que fuera mejor
  }
 });
 frame.getContentPane().add(btnAddWindow);
 frame.pack();
 frame.setSize(400,700);
}

private void add_pane(){
 if(!window_added){
 win.close();
 contentPane = new window_container();
 contentPane.setVisible(true);
 frame.getContentPane().add(contentPane);
 window_added = true;
 System.out.println("Agregado panel");
 }
 else{
  System.out.println("Panel no agregado");
 }
}
}

 

window.java

 

import javax.swing.JFrame;

public class window extends JFrame {

private static final long serialVersionUID = 1L;
private window_container contentPane;

public window() {

 this.setTitle("Ventana secundaria");
 setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
 setBounds(100, 100, 500, 300);
 contentPane = new window_container();
 setContentPane(contentPane);
 this.pack();
 this.setSize(500,200);
 this.setVisible(true);

}

@SuppressWarnings("deprecation")
public void close(){
 this.hide();
}
}

 

 

window_container.java

 

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class window_container extends JPanel {

private static final long serialVersionUID = 1L;

public window_container(){

 this.setBorder(new EmptyBorder(5, 5, 5, 5));
 this.setLayout(new BorderLayout(0, 0)); 
 JPanel panel = new JPanel();
 this.add(panel, BorderLayout.CENTER);

 JLabel lblHola = new JLabel("Hola!!");
 panel.add(lblHola);

 JButton btnHola = new JButton("hola");
 panel.add(btnHola);

}
}

Edited by zafrada
Link to comment
Share on other sites

estoy trabajando con formularios jframe en netbeans y si con swing

probé tu código pero no paso nada me abre una ventana con un botón el cual al presionar solo obtengo un ventana mas pequeña con un nuevo botón.

 

yo quiero saber como puedo o si es que se puede cargar una ventana de otra clase en un contenedor de otra clase distinta

Link to comment
Share on other sites

estoy trabajando con formularios jframe en netbeans y si con swing

probé tu código pero no paso nada me abre una ventana con un botón el cual al presionar solo obtengo un ventana mas pequeña con un nuevo botón.

 

yo quiero saber como puedo o si es que se puede cargar una ventana de otra clase en un contenedor de otra clase distinta

 

Estás equivocado, si funciona. Al ejecutar el código te abre 2 ventanas, al presionar el botón en la ventana principal, se cierra la ventana secundaria y se añade el contenido de la otra ventana dentro de la ventana principal. No puedes meter un Jframe dentro de otra ventana, lo que puedes hacer es obtener su Jcontentpane y insertarlo en otra ventana, pero no el Jframe, porque Jframe se extiende de Window de awt, osea, no es sólo un contenedor, es una ventana.

 

Ahora hice otro de la forma que tú quieres hacerlo, aunque yo creo que no es la mejor, suponte tienes la clase ventana principal y la ventana secundaria, la ventana secundaria la dejas como atributo privado dentro de ventana principal, y la instancias junto con esta en el constructor. Luego, con un action performed en el botón de la ventana principal, obtienes el JContentPane y se lo agregas a tu JContentPane de la ventana principal, así:

 

 

 btnCopiarVentana.addActionListener(new ActionListener() {
  @SuppressWarnings("deprecation")
  public void actionPerformed(ActionEvent arg0) {
frame.getContentPane().add(ventana.getContentPane());
ventana.hide();
//FIXME: el repaint no funciona, pero así si redibuja la ventana
frame.setSize(400,201);
frame.setSize(400,200);
  }
 });

 

Tienes que tener una variable booleana para verificar que ya no has agregado el jcontentpane antes, de esa forma no lo agregas 2 veces, acá no lo hice, pero está en el código anterior que te dejé. Te demuestro que funciona con un video:

 

http://www.youtube.com/watch?v=0Lz2WHxxwr0&feature=youtu.be

 

 

Y mira, lo mejoré

 

http://www.youtube.com/watch?v=1f6C_3UB6Kg&feature=youtu.be

Edited by zafrada
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...