ynthn Posted May 18, 2012 Report Share Posted May 18, 2012 (edited) 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: Edited May 19, 2012 by ynthn Link to comment Share on other sites More sharing options...
zafrada Posted May 19, 2012 Report Share Posted May 19, 2012 (edited) swing? pon algo de código aunque sea Edited May 19, 2012 by zafrada Link to comment Share on other sites More sharing options...
ynthn Posted May 19, 2012 Author Report Share Posted May 19, 2012 lo que quiero es cargar una nueva ventana en el contenedor derecho de la ventanapricipal.java mediante un botón del contenedor de la izquierdaes hacer algo parecido como los frame de htmlquiero cargar una ventana en un contenedor sin cerrar la ventana actual solo actualizar el contenedor derecho Link to comment Share on other sites More sharing options...
zafrada Posted May 19, 2012 Report Share Posted May 19, 2012 (edited) 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 May 19, 2012 by zafrada Link to comment Share on other sites More sharing options...
ynthn Posted May 20, 2012 Author Report Share Posted May 20, 2012 estoy trabajando con formularios jframe en netbeans y si con swingprobé 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 More sharing options...
zafrada Posted May 20, 2012 Report Share Posted May 20, 2012 (edited) estoy trabajando con formularios jframe en netbeans y si con swingprobé 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 May 20, 2012 by zafrada Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now