elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Meter un Frame dentro de otro Frame
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: Meter un Frame dentro de otro Frame  (Leído 18,620 veces)
kikian94

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Meter un Frame dentro de otro Frame
« en: 12 Marzo 2015, 19:35 pm »

Hola, tengo que crear una aplicacion que de informacion sobre el tiempo y necesito crear esto:


y necesito esto:



la organizacion del frame es borderlayout y habia pensado en poner en la parte izquierda otro layout divido en 2 pero no se como hacerlo


En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #1 en: 12 Marzo 2015, 19:43 pm »

No es buena práctica que un JFrame sea hijo de otro JFrame. Usa JDialogs que para eso están, para mostrar ventanas de diálogo, para mostrar las opciones del software, mostrar información de algún evento, realizar una venta, etc.

Así indicas que el JFrame (ventana principal) será padre de un diálogo:

Código
  1. new JDialog(TU_INSTANCIA_DE_FRAME);

Al hacer esto, cuando abras un JDialog no podrás tocar el JFrame mientras no hayas cerrado el JDialog, que siempre es una buena práctica. Por ejemplo, si vas a mostrar información meterorológica de X ciudad, la muestras en un JDialog y ésta bloqueará el JFrame. Hasta que se cierre el JDialog no se podrá seguir revisando información meteorológicas de otras ciudades.


En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
kikian94

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #2 en: 13 Marzo 2015, 17:11 pm »

no puedo utilizar jframe por que estamos haciendo uso de la libreria awt y no se de que manera colocar el layout a la izquierda, y no tiene que abrirse ninguna ventana a no ser que pulse en añadir provincia o añadir poblacion, tiene que quedar como en la fotografia, se como poner cada cosa, pero a la hora de poner 2 textArea, uno para provincia y otro para poblacion no puedo ubicarlos a la zquierda debido a la disposicion del borderlayout por lo que por eso queria añadir otro layout a la izquierda y dentro de este meter 2 textArea
« Última modificación: 13 Marzo 2015, 17:14 pm por kikian94 » En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #3 en: 13 Marzo 2015, 17:44 pm »

AWT también tiene Frame y Dialog. El procedimiento es el mismo. El de la izquierda puede ser un GridLayout, especificas una columna y dos filas y el margen (distancia) vertical.
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
kikian94

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #4 en: 13 Marzo 2015, 17:59 pm »

a vale, pensaba que jdialog era de swing, si, eso era lo que queria pero no se sintacticamente como poner el gridlayout dentro del borderlayout en la izquierda
En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #5 en: 13 Marzo 2015, 18:45 pm »

Agrega un Panel en la parte izquierda, y a ese Panel le asignas el layout GridLayout. Lee la documentación de Oracle, tutoriales, para que veas ejemplos reales.
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
kikian94

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #6 en: 14 Marzo 2015, 18:53 pm »

He probado con el panel, y si funciona pero tengo un problema no se alinear los elementos, he creado un box layout:
Código
  1. Panel izquierda = new Panel(new GridLayout(4,1));
  2.  
  3. Label lProvincia = new Label("Provincias:");
  4. List tProvincias = new List();
  5. Label lPoblacion = new Label("Poblaciones:");
  6. List tPoblaciones = new List();
  7.  
  8. izquierda.add(lProvincia);
  9. izquierda.add(tProvincias);
  10. izquierda.add(lPoblacion);
  11. izquierda.add(tPoblaciones);
  12.  
  13.  
  14. add (izquierda, BorderLayout.WEST);

« Última modificación: 14 Marzo 2015, 19:00 pm por kikian94 » En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #7 en: 14 Marzo 2015, 21:21 pm »

Cuando tengas una duda, primero consulta la documentación. Para eso está, para que los programadores la consulten ante cualquier duda. Aquí tienes la documentación de GridLayout: GridLayout.

Como se puede observar tiene sobrecarga de constructores. El otro constructor acepta 4 parámetros, siendo los últimos el espaciado horizontal y el espaciado vertical. Juega con éstos valores a ver si consigues lo que deseas hacer.
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
kikian94

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #8 en: 15 Marzo 2015, 08:53 am »

estuve mirando ayer pero cambiando valores me seguia saliendo igual, y otra cosa, al pulsar el boton crear provincia me tiene que saltar una ventanita para que indique nombre de provincia y le de a crear o cancelar, pero no se el orden que debo de seguir, creo el action listener del boton crear provincia y luego para el boton del dialogo crear, el action listener lo tengo que crear dentro del primero o en una clase independiente?, muchas gracias
En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Meter un Frame dentro de otro Frame
« Respuesta #9 en: 15 Marzo 2015, 18:27 pm »

Yo siempre recomiendo aislar la lógica, el dominio de las vistas. Aplicar el patrón MVC para desacoplar tu aplicación te ahorrará muchos problemas.

Por ejemplo, supongamos que tienes tu Frame o JFrame (Dile con todo respeto a tu profesor que no enseñe tecnologías obsoletas):

MainWindow.java
Código
  1. package com.company.app.views;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.FlowLayout;
  6. import java.awt.GridBagConstraints;
  7. import java.awt.GridBagLayout;
  8. import java.awt.GridLayout;
  9.  
  10. import javax.swing.JButton;
  11. import javax.swing.JFrame;
  12. import javax.swing.JLabel;
  13. import javax.swing.JList;
  14. import javax.swing.JMenu;
  15. import javax.swing.JMenuBar;
  16. import javax.swing.JMenuItem;
  17. import javax.swing.JPanel;
  18. import javax.swing.JScrollPane;
  19. import javax.swing.JTextArea;
  20. import javax.swing.UIManager;
  21. import javax.swing.UnsupportedLookAndFeelException;
  22.  
  23. import com.company.app.controllers.MainWindowController;
  24. import com.company.app.model.entities.Population;
  25.  
  26. public class MainWindow extends JFrame {
  27. private static final long serialVersionUID = -2973563217322489640L;
  28. private JMenuItem iOpen;
  29. private JMenuItem iExit;
  30. private JMenuItem iNewProvince;
  31. private JMenuItem iUpdateProvince;
  32. private JMenuItem iNewPopulation;
  33. private JMenuItem iUpdatePopulation;
  34. private JMenuItem iAbout;
  35. private JButton btnUpdatePrediction;
  36. private JButton btnNewProvince;
  37. private JButton btnNewPopulation;
  38. private JList<String> provinceList;
  39. private JList<Population> populationList;
  40. private JLabel lblFooter;
  41. private MainWindowController controller;
  42.  
  43. public MainWindow() {
  44. super();
  45. controller = new MainWindowController(this);
  46. initComponents();
  47. }
  48.  
  49. private void initComponents() {
  50. this.setLayout(new BorderLayout(10,10));
  51.  
  52. JPanel top = new JPanel(new BorderLayout());
  53. top.setLayout(new GridLayout(2,1,0,0));
  54. top.add(addMenuBar());
  55. top.add(addToolbar());
  56. this.add(BorderLayout.NORTH, top);
  57. JPanel center = new JPanel(new BorderLayout(10,10));
  58. center.add(BorderLayout.WEST, addProvincesPanel());
  59. center.add(BorderLayout.CENTER, addPredictionsPanel());
  60. this.add(BorderLayout.CENTER, center);
  61. this.add(BorderLayout.SOUTH, addFooterPanel());
  62.  
  63. this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  64. JFrame.setDefaultLookAndFeelDecorated(true);
  65. this.setTitle("Sistema metereológico");
  66. this.setSize(800,600);
  67. try {
  68. UIManager.setLookAndFeel(
  69.        UIManager.getSystemLookAndFeelClassName());
  70. } catch (ClassNotFoundException e) {
  71. e.printStackTrace();
  72. } catch (InstantiationException e) {
  73. e.printStackTrace();
  74. } catch (IllegalAccessException e) {
  75. e.printStackTrace();
  76. e.printStackTrace();
  77. }
  78.  
  79. }
  80.  
  81. private JMenuBar addMenuBar() {
  82. JMenuBar menubar = new JMenuBar();
  83. menubar.setBackground(new Color(50,50,50));
  84.  
  85. JMenu menuFile = new JMenu("Archivo");
  86. menuFile.setForeground(Color.WHITE);
  87. iOpen = new JMenuItem("Abrir...");
  88. iOpen.addActionListener(controller);
  89. iExit = new JMenuItem("Salir");
  90. iExit.addActionListener(controller);
  91. menuFile.add(iOpen);
  92. menuFile.add(iExit);
  93.  
  94. JMenu menuProvince = new JMenu("Provincias");
  95. menuProvince.setForeground(Color.WHITE);
  96. iNewProvince = new JMenuItem("Nueva provincia");
  97. iNewProvince.addActionListener(controller);
  98. iUpdateProvince = new JMenuItem("Actualizar provincia");
  99. iUpdateProvince.addActionListener(controller);
  100. menuProvince.add(iNewProvince);
  101. menuProvince.add(iUpdateProvince);
  102.  
  103. JMenu menuPopulation = new JMenu("Poblaciones");
  104. menuPopulation.setForeground(Color.WHITE);
  105. iNewPopulation = new JMenuItem("Nueva población");
  106. iNewPopulation.addActionListener(controller);
  107. iUpdatePopulation = new JMenuItem("Actualizar población");
  108. iUpdatePopulation.addActionListener(controller);
  109. menuPopulation.add(iNewPopulation);
  110. menuPopulation.add(iUpdatePopulation);
  111.  
  112. JMenu menuAbout = new JMenu("Ayuda");
  113. menuAbout.setForeground(Color.WHITE);
  114. iAbout = new JMenuItem("Acerca...");
  115. iAbout.addActionListener(controller);
  116. menuAbout.add(iAbout);
  117.  
  118. menubar.add(menuFile);
  119. menubar.add(menuProvince);
  120. menubar.add(menuPopulation);
  121. menubar.add(menuAbout);
  122.  
  123. return menubar;
  124. }
  125.  
  126. private JPanel addToolbar() {
  127. JPanel toolbar = new JPanel(new FlowLayout(FlowLayout.LEFT));
  128. toolbar.setBackground(new Color(0,184,255));
  129. toolbar.setSize(50,100);
  130. btnUpdatePrediction = new JButton("Actualizar predicción");
  131. btnUpdatePrediction.setFocusable(false);
  132. btnUpdatePrediction.addActionListener(controller);
  133. btnNewProvince = new JButton("Nueva provincia");
  134. btnNewProvince.setFocusable(false);
  135. btnNewProvince.addActionListener(controller);
  136. btnNewPopulation = new JButton("Nueva población");
  137. btnNewPopulation.setFocusable(false);
  138. btnNewPopulation.addActionListener(controller);
  139.  
  140. toolbar.add(btnUpdatePrediction);
  141. toolbar.add(btnNewProvince);
  142. toolbar.add(btnNewPopulation);
  143.  
  144. return toolbar;
  145. }
  146.  
  147. private JPanel addProvincesPanel() {
  148. JPanel panel = new JPanel(new GridBagLayout());
  149.  
  150. provinceList = new JList<>();
  151. populationList = new JList<>();
  152.  
  153. constraints.gridx = 0;
  154. constraints.gridy = 0;
  155. constraints.gridwidth = 1;
  156. constraints.gridheight = 1;
  157. panel.add(new JLabel("Provincias"), constraints);
  158.  
  159. constraints = new GridBagConstraints();
  160. constraints.gridx = 0;
  161. constraints.gridy = 1;
  162. constraints.gridwidth = 2;
  163. constraints.gridheight = 1;
  164. constraints.weighty = 1.0;
  165. constraints.fill = GridBagConstraints.BOTH;
  166. panel.add(new JScrollPane(provinceList), constraints);
  167.  
  168.  
  169. constraints = new GridBagConstraints();
  170. constraints.gridx = 0;
  171. constraints.gridy = 2;
  172. constraints.gridwidth = 1;
  173. constraints.gridheight = 1;
  174. panel.add(new JLabel("Poblaciones"), constraints);
  175.  
  176. constraints = new GridBagConstraints();
  177. constraints.gridx = 0;
  178. constraints.gridy = 3;
  179. constraints.gridwidth = 2;
  180. constraints.gridheight = 1;
  181. constraints.weighty = 1.0;
  182. constraints.fill = GridBagConstraints.BOTH;
  183. panel.add(new JScrollPane(populationList), constraints);
  184.  
  185. return panel;
  186. }
  187.  
  188. private JPanel addPredictionsPanel() {
  189. JPanel panel = new JPanel(new BorderLayout());
  190. JLabel provinceName = new JLabel("Predicciones para ");
  191. JTextArea textArea = new JTextArea();
  192. textArea.setEditable(false);
  193. panel.add(BorderLayout.NORTH, provinceName);
  194. panel.add(BorderLayout.CENTER, new JScrollPane(textArea));
  195.  
  196. return panel;
  197. }
  198.  
  199. private JPanel addFooterPanel() {
  200. JPanel panel = new JPanel();
  201. panel.setBackground(new Color(80,80,80));
  202. lblFooter = new JLabel("Sistema metereológico");
  203. lblFooter.setForeground(new Color(200,200,200));
  204. panel.add(lblFooter);
  205.  
  206. return panel;
  207. }
  208.  
  209. }

MainWindowController.java

Código
  1. package com.company.app.controllers;
  2.  
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5.  
  6. import com.company.app.views.MainWindow;
  7. import com.company.app.views.NewProvinceDialog;
  8.  
  9. public class MainWindowController implements ActionListener {
  10. private MainWindow gui;
  11.  
  12. public MainWindowController(MainWindow gui) {
  13. this.gui = gui;
  14. }
  15.  
  16. @Override
  17. public void actionPerformed(ActionEvent e) {
  18. if(e.getActionCommand().equals("Nueva provincia")) {
  19. NewProvinceDialog dialog = new NewProvinceDialog(gui);
  20. dialog.setVisible(true);
  21. }
  22. }
  23.  
  24. }

NewProvinceDialog.java

Código
  1. package com.company.app.views;
  2.  
  3. import java.awt.GridBagConstraints;
  4. import java.awt.GridBagLayout;
  5.  
  6. import javax.swing.JButton;
  7. import javax.swing.JDialog;
  8. import javax.swing.JFrame;
  9. import javax.swing.JLabel;
  10. import javax.swing.JPanel;
  11. import javax.swing.JTextField;
  12.  
  13. public class NewProvinceDialog extends JDialog {
  14. private static final long serialVersionUID = -3369879094143739366L;
  15. private JTextField txtProvince;
  16. private JButton btnAddProvince;
  17.  
  18. public NewProvinceDialog(JFrame parent) {
  19. super(parent);
  20. initComponents(parent);
  21. }
  22.  
  23. private void initComponents(JFrame parent) {
  24. JPanel panel = new JPanel(new GridBagLayout());
  25. JLabel label = new JLabel("Nombre de la provincia:");
  26. txtProvince = new JTextField();
  27. btnAddProvince = new JButton("Agregar");
  28.  
  29. constraints.gridx = 0;
  30. constraints.gridy = 0;
  31. constraints.gridwidth = 1;
  32. constraints.gridheight = 1;
  33. constraints.weighty = 1.0;
  34. panel.add(label, constraints);
  35.  
  36. constraints = new GridBagConstraints();
  37. constraints.gridx = 1;
  38. constraints.gridy = 0;
  39. constraints.gridwidth = 3;
  40. constraints.gridheight = 1;
  41. constraints.weightx = 1.0;
  42. constraints.fill = GridBagConstraints.HORIZONTAL;
  43. panel.add(txtProvince, constraints);
  44.  
  45. constraints = new GridBagConstraints();
  46. constraints.gridx = 3;
  47. constraints.gridy = 1;
  48. constraints.gridwidth = 1;
  49. constraints.gridheight = 1;
  50. constraints.anchor = GridBagConstraints.EAST;
  51. panel.add(btnAddProvince, constraints);
  52.  
  53. this.add(panel);
  54. this.setTitle("Agregar nueva provincia");
  55. this.setSize(280,100);
  56. this.setModal(true);
  57. this.setLocationRelativeTo(parent);
  58. this.setResizable(false);
  59.  
  60. }
  61.  
  62. }

Imágenes:





Sólo es cosa de jugar con los layouts y delegar responsabilidades correctamente. Cualquier duda, comentas.
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
Páginas: [1] 2 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
pregunta sobre como ver los datos de un frame a otro en Netbeans
Java
XpandyX 0 3,197 Último mensaje 8 Marzo 2011, 17:56 pm
por XpandyX
Cerrar Frame al Abrir otro
Java
monsefoster 0 3,609 Último mensaje 8 Abril 2011, 19:33 pm
por monsefoster
[Solucionado] como meter un form dentro de otro en c#
.NET (C#, VB.NET, ASP)
chelita 2 14,010 Último mensaje 3 Junio 2011, 16:43 pm
por chelita
Facebook dentro de un frame.
Desarrollo Web
A2Corp 4 4,063 Último mensaje 20 Abril 2012, 18:24 pm
por A2Corp
Como pasar un Frame o un Picturebox completo de un form a otro.
Programación Visual Basic
79137913 0 2,515 Último mensaje 12 Junio 2012, 20:08 pm
por 79137913
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines