2012-04-27 18 views
12

Quiero un JPanel con un tamaño y una posición definida. Dentro del JPanel, tengo cierta cantidad de elementos (botones) insertados horizontalmente. Debido a que mi JPanel tiene un ancho definido, si agrego muchos botones, no pude ver eso. En este caso, necesito una barra de desplazamiento para este JPanel. Pero este JPanel debe tener un CIERTO TAMAÑO EN UNA DETERMINADA POSICIÓN dentro de un JFrame. La barra de desplazamiento del JPanel se ha posicionado debajo de él horizontalmente. ¿Puede ayudarme alguien? ¡Lo intenté sin éxito!Desplazamiento de un JPanel

+0

yo sepa, el punto es ya su 'JPanel' ha una 'Definido anchura/altura/size', por lo que una vez que añadir nada a ella, que va más allá de su tamaño, no puede ver esa cosa, incluso con' JScrollPane' se le agregó, ya que incluso 'JScrollPane' no puede ir más allá del tamaño de' JPanel', por lo que esos componentes están ocultos siempre :(. Ya que si no 'defines su tamaño, los componentes se agregan primero al 'JPanel' y entonces es 'preferredSize()' está determinado implícitamente por 'doLayout()' tipo de cosas, por lo tanto su 'JScrollPane' funciona en esa situación, pero no aquí. –

+1

También considere [' JToolBar'] (http://docs.oracle .com/javase/tutorial/uiswing/components/toolbar.html) o un [diseño adecuado] (http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html). Sin un [sscce] (http://sscce.org/) que aclara el significado de _cierto tamaño_ y _cierta posición_, esta pregunta no puede responderse en su forma actual. – trashgod

Respuesta

17

Utilice un JScrollPane y fuerce su preferredSize a su tamaño dado (o configure el contenedor de scrollPane LayoutManager para anular y llame a setBounds() en el panel de desplazamiento). También establece las políticas de barra de desplazamiento. He aquí una pequeña muestra de que:

import java.awt.Dimension; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 

public class Test { 

    public static void main(String... args) { 
     JFrame frame = new JFrame(); 
     JPanel panel = new JPanel(); 
     for (int i = 0; i < 10; i++) { 
      panel.add(new JButton("Hello-" + i)); 
     } 
     JScrollPane scrollPane = new JScrollPane(panel); 
     scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); 
     scrollPane.setBounds(50, 30, 300, 50); 
     JPanel contentPane = new JPanel(null); 
     contentPane.setPreferredSize(new Dimension(500, 400)); 
     contentPane.add(scrollPane); 
     frame.setContentPane(contentPane); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 
+0

Emm, el problema es que necesito ubicar el JPanel en una posición específica del JFrame. Además, debe tener un tamaño definido. – Chu

+0

@BrallanAguilar ya sea que use un LayoutManager para posicionar y clasificar sus componentes, configure LayoutManager como nulo y llame a setBounds() para posicionar y dimensionar su componente. En este caso, debe hacer eso en el JScrollPane –

+0

¿Puede ayudarme con un ejemplo, por favor? – Chu

5

Agregue todos los botones a su panel. Luego agrega este panel al panel de desplazamiento.

panel.add(button1); 
panel.add(button2); 
panel.add(button3); 
. 
. 
. 
panel.add(buttonn); 

Una vez que agregue botones en el panel, agregue el panel al panel de desplazamiento.

JScrollPane panelPane = new JScrollPane(panel); 

Y añada este panel a su marco.

+0

Lo siento, pero necesito la parte de JPanel en un determinado tamaño y posición. Además, la orientación de la barra de desplazamiento :) – Chu

+0

Lo siento poco pobre en inglés .. 'determinate' significa? –

+0

jeje "específico": D – Chu