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

Scroll

Estas en el tema de Scroll en el foro de Java en Foros del Web. Que tal !!! Tengo la siguiente duda en una aplicacion de escritorio: Existe un form principal y varios secundarios (internal frame y dialog) que se ...
  #1 (permalink)  
Antiguo 28/12/2009, 09:48
Avatar de juamd  
Fecha de Ingreso: marzo-2009
Ubicación: Bogotá
Mensajes: 285
Antigüedad: 15 años, 1 mes
Puntos: 8
Scroll

Que tal !!!

Tengo la siguiente duda en una aplicacion de escritorio: Existe un form principal y varios secundarios (internal frame y dialog) que se van llamando desde este, como puedo hacer para que algunos de los forms secundarios tengan scroll ?

Saludos.
  #2 (permalink)  
Antiguo 28/12/2009, 13:18
Avatar de haggenx  
Fecha de Ingreso: febrero-2007
Ubicación: México
Mensajes: 823
Antigüedad: 17 años, 2 meses
Puntos: 24
De acuerdo Respuesta: Scroll

Para agregar un scroll a un jinternalframe sinceramente no tengo idea, pero lo que yo hecho si te sirve es usar un jscrollpane, a este le agregas un componente, en este caso te recomiendo que:

a) Crear un jpanel y agregar tus componentes visuales a el y luego agregues el jpanel al jscrollpane.

b) Si estas usando netbeans agrega una nueva ventana a tu proyecto, dentro de ella creas un jpanel, agregas tus componentes y luego crea una funcion que retorne un jpanel retornando en ella el panel que agregaste, luego en el jscrollpane de tu primer ventana agregas un codigo similar al siguiente:
scrollpanename.add(new Ventana().GetPanel());

Donde scrollpanename es tu scrollpane, ventana la ventana que hace la funcion de subformulario y GetPanel el panel o interfaz visible, de esta manera logras separar un poco tu codigo y simulas los subformularios, saludos.

Última edición por haggenx; 28/12/2009 a las 13:22 Razón: se acomodo mal el texto
  #3 (permalink)  
Antiguo 28/12/2009, 14:15
Avatar de juamd  
Fecha de Ingreso: marzo-2009
Ubicación: Bogotá
Mensajes: 285
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Scroll

Que tal !!!

Claro que me sirve esa sugerencia, ya mismo la voy a probar.

Gracias.
  #4 (permalink)  
Antiguo 28/12/2009, 15:37
Avatar de haggenx  
Fecha de Ingreso: febrero-2007
Ubicación: México
Mensajes: 823
Antigüedad: 17 años, 2 meses
Puntos: 24
Respuesta: Scroll

suerte
  #5 (permalink)  
Antiguo 29/12/2009, 07:27
Avatar de juamd  
Fecha de Ingreso: marzo-2009
Ubicación: Bogotá
Mensajes: 285
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Scroll

Que tal !!!

Sigo mirando tu sugerencia, pero tengo una duda, cuando hablas de crear una ventana en el proyecto te refieres a crear un contenedor para JPanel ? si es asi de que tipo seria este, JDialog, JInternalFrame ?

Lo que hice fue crear una JInternalFrame nuevo y alli inclui el JPanel, en el internal frame defini la funcion que retorna el jpanel, luego en mi form principal el cual es un Jframe le agrego al jscrollpanel el panel que me retorna la funcion del internal frame, en este punto puedo obtener los datos del jpanel, pero no puedo visualizarlo en la pantalla, intente con setvisible pero sigue igual. Que estoy haciendo mal ?

Saludos.

Última edición por juamd; 29/12/2009 a las 07:38
  #6 (permalink)  
Antiguo 29/12/2009, 09:32
Avatar de haggenx  
Fecha de Ingreso: febrero-2007
Ubicación: México
Mensajes: 823
Antigüedad: 17 años, 2 meses
Puntos: 24
De acuerdo Respuesta: Scroll

En netbeans tienes tu proyecto abierto y en la lista de tus archivos que lo componen haz click con el botón secundario de tu mouse y esto genera un menu con diversas opciones, una de ellas dice "Nuevo" y dentro de el menu hay mas opciones, elige la que te diga nuevo JFrame, llenas los datos de como se va a llamar la clase y esto te genera un nuevo archivo .java con los datos de esa clase, si lo ves en forma grafica es la parte visible de un jframe pero en un archivo aparte, el encabezado dice algo asi:

Código:
public class classname extends javax.swing.JFrame
{
  initComponents();
}
donde classname es el nombre que le diste a ese archivo e initcomponents es una funcion que genera netbeans donde inicia ese jframe, el caso es que en el editor grafico diseñas el contenido de ese jframe, yo lo que hago es poner un panel principal y dentro de el crear la interfaz de ese subformulario que piensas crear metiendo botones, cuadros de texto, etc, luego dentro del codigo de ese archivo crear una funcion que retorne el jpanel, algo asi:

Código:
public JPanel GetPanel()
{
  return pMainArea;
}
donde pMainArea es el nombre del jpanel que contiene todo mi diseño, luego regresas a tu codigo, me dices que tienes un jinternalframe que seria la ventana a mostrar, imagino que tienes un jframe que hace las veces de tu ventana mdi y un jinternalframe que seria una ventana dentro de tu programa y supongo que esta contendra un subformulario en su interior. En este jinternalframe yo por lo general uso un layout de tipo borderlayout o cardlayout (poniendo su respectiva separacion para que no quede todo al borde de la ventana) y agrego un jscrollpane, como estaria con un layout borderlayout y si lo agregas con center pues ya no tendrias que preocuparte por el tamaño pues tu jscrollpane se ajustaria al tamaño de la ventana, entonces ya solo agregas tu panel al jscrollpane, algo asi:

Código:
jscrollpanename.setViewportView(new classname().GetPanel());
Tienes razon, yo aqui me estaba confundiendo, es setViewportView en lugar de add para el jscrollpane, pues de lo contrario aunque si funciona se comporta algo raro.
Te anexo el codigo fuente de un ejemplo en netbeans (los archivos .java) que espero te ayuden, el ejemplo genera una ventana con dos jinternalframe en su interior y cada uno con un subformulario, en realidad es el mismo subformulario pero en dos referencias y como estan metidos en un jscrollpane si el tamaño del panel es mayor que el jscrollpane este muestra las barras de desplazamiento.

################################################## ############################

Main.java (este es el archivo de inicio)

/*
* Main.java
*
* Created on 29 de diciembre de 2009, 08:39 AM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package ejemplosubformulario;

import java.awt.*;
import javax.swing.*;

/**
*
* @author uat
*/
public class Main {

/** Creates a new instance of Main */
public Main()
{

JFrame frmMain = new JFrame("Ventana MDI");
JInternalFrame frmMDI1 = new JInternalFrame("Ventana MDI child 1");
JInternalFrame frmMDI2 = new JInternalFrame("Ventana MDI child 2");
JDesktopPane jdpContainer = new JDesktopPane();
JScrollPane subform1 = new JScrollPane();
JScrollPane subform2 = new JScrollPane();

subform1.setViewportView(new CSubformulario().GetPanel());
subform2.setViewportView(new CSubformulario().GetPanel());

frmMDI1.setLayout(new BorderLayout(3, 3));
frmMDI1.setSize(200, 200);
frmMDI1.setResizable(true);
frmMDI1.setVisible(true);

frmMDI2.setLayout(new BorderLayout(3, 3));
frmMDI2.setSize(120, 120);
frmMDI2.setResizable(true);
frmMDI2.setVisible(true);

frmMDI1.add(subform1, new BorderLayout().CENTER);
frmMDI2.add(subform2, new BorderLayout().CENTER);

jdpContainer.add(frmMDI1);
jdpContainer.add(frmMDI2);

frmMain.add(jdpContainer, new BorderLayout().CENTER);

frmMain.setSize(300, 300);
frmMain.setVisible(true);

}

/**
* @param args the command line arguments
*/

public static void main(String[] args)
{

// TODO code application logic here
new Main();

}

}

################################################## ############################

CSubformulario.java (este es el subformulario que pretendemos insertar en otros frames)

/*
* CSubformulario.java
*
* Created on 29 de diciembre de 2009, 08:53 AM
*/

package ejemplosubformulario;

import javax.swing.*;

/**
*
* @author uat
*/

public class CSubformulario extends javax.swing.JFrame {

/** Creates new form CSubformulario */
public CSubformulario() {
initComponents();
}

public JPanel GetPanel()
{
return pMainArea;
}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Código Generado ">
private void initComponents() {
pMainArea = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jTextField1 = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstan ts.EXIT_ON_CLOSE);
pMainArea.setLayout(new java.awt.GridLayout(2, 2));
jButton1.setText("jButton1");
pMainArea.add(jButton1);
jButton2.setText("jButton2");
pMainArea.add(jButton2);
jButton3.setText("jButton3");
pMainArea.add(jButton3);
jTextField1.setText("jTextField1");
pMainArea.add(jTextField1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(pMainArea, javax.swing.GroupLayout.PREFERRED_SIZE, 208, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(192, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(pMainArea, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(246, Short.MAX_VALUE))
);
pack();
}// </editor-fold>

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new CSubformulario().setVisible(true);
}
});
}

// Declaración de varibales -no modificar
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JTextField jTextField1;
private javax.swing.JPanel pMainArea;
// Fin de declaración de variables

}
  #7 (permalink)  
Antiguo 29/12/2009, 09:54
Avatar de juamd  
Fecha de Ingreso: marzo-2009
Ubicación: Bogotá
Mensajes: 285
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Scroll

Que tal !!!!

Todo fue solucionado con el setViewportView, este me permitio agregar y ver el jpanel, segun la API el JscrollPane no debe tener hijos directamente y todos deben ser agregados a traves del setviewportview.

Muchas gracias por tanta ayuda.

Saludos.
  #8 (permalink)  
Antiguo 29/12/2009, 10:09
Avatar de haggenx  
Fecha de Ingreso: febrero-2007
Ubicación: México
Mensajes: 823
Antigüedad: 17 años, 2 meses
Puntos: 24
Respuesta: Scroll

que bueno que ya funciona.
  #9 (permalink)  
Antiguo 05/01/2010, 14:29
Avatar de juamd  
Fecha de Ingreso: marzo-2009
Ubicación: Bogotá
Mensajes: 285
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Scroll

Que tal !!!

Regreso sobre el mismo hilo porque necesito saber como quitar de la pantalla el panel agregado. Existe algun metodo que haga lo contrario a "setViewporView" ?

Saludos.
  #10 (permalink)  
Antiguo 13/01/2010, 15:20
Avatar de haggenx  
Fecha de Ingreso: febrero-2007
Ubicación: México
Mensajes: 823
Antigüedad: 17 años, 2 meses
Puntos: 24
Respuesta: Scroll

eso si no lo se, que pasa si cargas otro panel en su lugar con setviewport?
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 21:58.