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

[SOLUCIONADO] JScrollPane no muestra scrollbar

Estas en el tema de JScrollPane no muestra scrollbar en el foro de Java en Foros del Web. Hola!, estoy creando una aplicación que lee un xml y a raiz de eso creo varios jpanel que contienen una imagen, titulo y descripcion. Estos ...
  #1 (permalink)  
Antiguo 28/03/2014, 01:07
 
Fecha de Ingreso: marzo-2014
Ubicación: Madrid
Mensajes: 21
Antigüedad: 10 años, 7 meses
Puntos: 0
JScrollPane no muestra scrollbar

Hola!, estoy creando una aplicación que lee un xml y a raiz de eso creo varios jpanel que contienen una imagen, titulo y descripcion. Estos jpanel los añado a un jpanel padre que es el que guardo en un jscrollpane.
El problema viene porque no me deja la opción de hacer el scroll. Mi teoría es que eso sucede porque los jpanel hijos están posicionados aunque el padre no tenga ni tamaño ni posición.

Este es el código que utilizo:

Código:
JPanel jpanel=functions.createPanels(sShop);
JScrollPane scrollPane = new JScrollPane(jpanel);
		scrollPane.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
		scrollPane.setBounds(6, 251, 988, 256);
		SearchDevices sd=new SearchDevices();
		getContentPane().add(scrollPane);
La función createPanels
Código:
public JPanel createPanels(String sShop) {
		
		ArrayList<Data> listData = readXml(sShop);
		JPanel jpanel = null;
		JPanel alljpanel = new JPanel();
		//alljpanel.setBounds(6,16,976,1000);
		alljpanel.setLayout(null);
		
		URL url;
		BufferedImage image;
		JLabel lblImage;
		JLabel lblTitle;
		JLabel lblSubtitle;

		int x=6;
		int y=6;

		for (int i=0;i<listData.size();i++) {
			
			try {

	            lblImage = new JLabel();
	            lblImage.setBounds(6, 6, 100, 100);
	            //System.out.println(listApps.get(i).icon);
	            //System.out.println(listApps.get(i).name);
	            //System.out.println(listApps.get(i).category);
				url = new URL(listData.get(i).icon);
				image = ImageIO.read(url);

	            //System.out.println("Load image into frame...");
				lblImage.setIcon(new ImageIcon(image.getScaledInstance(100,100, Image.SCALE_SMOOTH)));
				
				lblTitle=new JLabel(listData.get(i).name);
				lblTitle.setBounds(6, 110, 100, 18);
				lblTitle.setFont(new Font("Calibri", Font.BOLD, 16));
				lblSubtitle=new JLabel(listData.get(i).category);
				lblSubtitle.setBounds(6, 130, 100, 16);
				

				jpanel=new JPanel();
				jpanel.setBounds(x,y,112,152);
				jpanel.setLayout(null);
				
				jpanel.add(lblImage);
				jpanel.add(lblTitle);
				jpanel.add(lblSubtitle);
				if(x<=784) {
					
					x+=112;
					
				} else {
					
					y+=152;
					x=6;
					
				}

			
			
				//System.out.println(x+" "+y+" "+listApps.get(i).name);
				
				alljpanel.add(jpanel);
	            
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
            
			
		}
		
		return alljpanel;
		
	}
Saludos!
  #2 (permalink)  
Antiguo 28/03/2014, 01:59
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: JScrollPane no muestra scrollbar

El JScrollPane muestra o no el scroll preguntándole a sus componentes por el tamaño que tienen. En tu caso, el JScrollPane le preguntaría a alljpanel por su tamaño para decidir si pone o no scroll.

Un panel decide el tamaño que tiene en función de su contenido y su layout. Si pones el layout del panel a null (alljpanel) y no le das tú un tamaño (con setSize o setBounds) más grande que el del JScrollPane, el panel dirá que su tamaño es 0,0, así que el JScrollPane tiene hueco de sobra para pintarlo y no mostrará el scroll.

se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 28/03/2014, 02:06
 
Fecha de Ingreso: marzo-2014
Ubicación: Madrid
Mensajes: 21
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: JScrollPane no muestra scrollbar

Buenas, gracias por responder :)

He añadido después del layout un tamaño y sigue sin funcionar.

Código:
alljpanel.setLayout(null);
alljpanel.setSize(978, 3000);
Saludos!
  #4 (permalink)  
Antiguo 28/03/2014, 11:14
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: JScrollPane no muestra scrollbar

Ponle mejor setPreferredSize()

El setSize() puede cambiarlo el JScrollPane. El JScrollPane preguntará al panel por su getPreferredSize() y tratará de respetarlo y llamará al setSize() del panel pasándole el tamaño que tenga que darle, "machacando" el valor que tú has dado.

Si setPreferredSize() tampoco te funciona, cuando hagas el new del allPanel hazlo así

Código Java:
Ver original
  1. JPanel alljpanel = new JPanel() {
  2.    @Override
  3.    public Dimension getPreferredSize() {
  4.        return new Dimension(anchoDeseado, altoDeseado);
  5.    }
  6. }

Este tipo de cosas "raras" es lo que pasa cuando se pone layout null. Es mejor poner algún layout que sea adecuado y dejar que los componentes decidan sus tamaños de acuerdo a su contenido de forma automática. Quizás este enlace pueda ayudarte http://chuwiki.chuidiang.org/index.p...Uso_de_Layouts

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 31/03/2014, 00:39
 
Fecha de Ingreso: marzo-2014
Ubicación: Madrid
Mensajes: 21
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: JScrollPane no muestra scrollbar

Con setPreferredSize() me ha funcionado! muchas gracias, seguiré tu consejo echaré un vistazo al enlace que me has pasado para no tener más problemas de este tipo.

Saludos!

Etiquetas: jscrollpane, muestra, scrollbar
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 13:00.