Agregar Scrollbar a JPanel

Iniciado por GSecurity, 26 Enero 2020, 01:53 AM

0 Miembros y 3 Visitantes están viendo este tema.

GSecurity

Hola a todos,

Este problema es muy posteado en distintos foros de programacion, sin embargo ninguno ha logrado ayudarme o quiza no he logrado entender  >:(.

Tengo un JPanel con layout Flow en donde agrego controles de manera dinamica, simplemente necesito agregar un scrollbar VERTICAL.

Codigo:
        JPanel pnlcenter = new JPanel();
        for (int i = 0; i < 50; i++) {
            JButton btnAgrega = new JButton("Hola");
            pnlcenter.add(btnAgrega);
        }
        pnlcenter.setLayout(new FlowLayout());
        pnlcenter.setBorder(BorderFactory.createLineBorder(Color.black));
        pnlcenter.setBounds(0, 0, 200, 200);
        pnlcenter.setPreferredSize(new Dimension(2000, 2000));
        pnlcenter.setVisible(true);
        JScrollPane scroller = new JScrollPane(pnlcenter);
        scroller.setViewportView(pnlcenter);
        this.add(pnlcenter);

Esto es tan basico que aun asi no logro resolverlo  :-( Help me please !!

rub'n

#1
Cita de: GSecurity en 26 Enero 2020, 01:53 AM
Hola a todos,

Este problema es muy posteado en distintos foros de programacion, sin embargo ninguno ha logrado ayudarme o quiza no he logrado entender  >:(.

Tengo un JPanel con layout Flow en donde agrego controles de manera dinamica, simplemente necesito agregar un scrollbar VERTICAL.

Codigo:
       JPanel pnlcenter = new JPanel();
       for (int i = 0; i < 50; i++) {
           JButton btnAgrega = new JButton("Hola");
           pnlcenter.add(btnAgrega);
       }
       pnlcenter.setLayout(new FlowLayout());
       pnlcenter.setBorder(BorderFactory.createLineBorder(Color.black));
       pnlcenter.setBounds(0, 0, 200, 200);
       pnlcenter.setPreferredSize(new Dimension(2000, 2000));
       pnlcenter.setVisible(true);
       JScrollPane scroller = new JScrollPane(pnlcenter);
       scroller.setViewportView(pnlcenter);
       this.add(pnlcenter);

Esto es tan basico que aun asi no logro resolverlo  :-( Help me please !!

>:D >:D  Mmm eso de que en ningun lugar leiste una solucion, suena a que no buscaste nada, siempre la hay LMAOO

Código (java) [Seleccionar]

/*

*/
public class ScrollPanel extends JFrame {

   public ScrollPanel() {
       JPanel pnlcenter = new JPanel();
       for (int i = 0; i < 50; i++) {
           JButton btnAgrega = new JButton("Hola");
           pnlcenter.add(btnAgrega);
       }
       pnlcenter.setLayout(new FlowLayout()); // por defecto usa FlowLayout
       pnlcenter.setBorder(BorderFactory.createLineBorder(Color.black));
       pnlcenter.setBounds(0, 0, 200, 200);
       pnlcenter.setPreferredSize(new Dimension(600, 600));
       pnlcenter.setVisible(true);

       final JScrollPane scroller = new JScrollPane(pnlcenter,  JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
       scroller.setViewportView(pnlcenter);

       this.setSize(new Dimension(400,400));
       this.add(scroller);
       this.pack();

       this.setLocationRelativeTo(null);

       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       this.setVisible(true);
   }

   public static void main(String ... blablla) {
       new Thread(ScrollPanel::new).start();
   }

}


Puedes tambien de la siguiente manera con los métodos suyos

Código (java) [Seleccionar]
final JScrollPane scroller = new JScrollPane(pnlcenter);
scroller.setViewportView(pnlcenter);
scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);


tambien que en la linea 22 tu no añadias el JScrollPane al JFrame me imagino.


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

GSecurity

Cita de: rub'n en 27 Enero 2020, 00:46 AM
>:D >:D  Mmm eso de que en ningun lugar leiste una solucion, suena a que no buscaste nada, siempre la hay LMAOO

Código (java) [Seleccionar]

/*

*/
public class ScrollPanel extends JFrame {

   public ScrollPanel() {
       JPanel pnlcenter = new JPanel();
       for (int i = 0; i < 50; i++) {
           JButton btnAgrega = new JButton("Hola");
           pnlcenter.add(btnAgrega);
       }
       pnlcenter.setLayout(new FlowLayout()); // por defecto usa FlowLayout
       pnlcenter.setBorder(BorderFactory.createLineBorder(Color.black));
       pnlcenter.setBounds(0, 0, 200, 200);
       pnlcenter.setPreferredSize(new Dimension(600, 600));
       pnlcenter.setVisible(true);

       final JScrollPane scroller = new JScrollPane(pnlcenter,  JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
       scroller.setViewportView(pnlcenter);

       this.setSize(new Dimension(400,400));
       this.add(scroller);
       this.pack();

       this.setLocationRelativeTo(null);

       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       this.setVisible(true);
   }

   public static void main(String ... blablla) {
       new Thread(ScrollPanel::new).start();
   }

}


Puedes tambien de la siguiente manera con los métodos suyos

Código (java) [Seleccionar]
final JScrollPane scroller = new JScrollPane(pnlcenter);
scroller.setViewportView(pnlcenter);
scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);


tambien que en la linea 22 tu no añadias el JScrollPane al JFrame me imagino.

Simplemente agregue toda estas lineas de codigo y ahora al ejecutar el frame se ve completamente vacio.

final JScrollPane scroller = new JScrollPane(pnlcenter,  JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scroller.setViewportView(pnlcenter);

        this.setSize(new Dimension(400,400));
        this.add(scroller);
        this.pack();
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);

Que puede estar pasando? hay algo que no debo estar entendiendo  :( :(

rub'n

#3
Cita de: GSecurity en  1 Febrero 2020, 03:36 AM
Simplemente agregue toda estas lineas de codigo y ahora al ejecutar el frame se ve completamente vacio.

final JScrollPane scroller = new JScrollPane(pnlcenter,  JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
       scroller.setViewportView(pnlcenter);

       this.setSize(new Dimension(400,400));
       this.add(scroller);
       this.pack();
       this.setLocationRelativeTo(null);
       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       this.setVisible(true);

Que puede estar pasando? hay algo que no debo estar entendiendo  :( :(


Pasa el codigo. que a en mi maquina funciona LMFAOO

Y usa GeSHI para añadir el codigo java.



rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

GSecurity

Cita de: rub'n en  1 Febrero 2020, 10:00 AM
Pasa el codigo. que a en mi maquina funciona LMFAOO

Y usa GeSHI para añadir el codigo java.


Aqui te dejo mi codigo, el formulario lo he creado desde la paleta de controles de netbeans.


Código (java) [Seleccionar]

public frmTest() {
        initComponents();   
        JPanel pnlcenter = new JPanel();
        for (int i = 0; i < 50; i++) {
            JButton btnAgrega = new JButton("Hola");
            pnlcenter.add(btnAgrega);
        }
        pnlcenter.setLayout(new FlowLayout());
        pnlcenter.setBorder(BorderFactory.createLineBorder(Color.black));
        pnlcenter.setBounds(0, 0, 200, 200);
        pnlcenter.setPreferredSize(new Dimension(2000, 2000));
        pnlcenter.setVisible(true);

        final JScrollPane scroller = new JScrollPane(pnlcenter, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scroller.setViewportView(pnlcenter);

        this.setSize(new Dimension(400, 400));
        this.add(scroller);
        this.pack();
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
}


Muchas gracias !!!!

rub'n

Cita de: GSecurity en  2 Febrero 2020, 18:00 PM
Aqui te dejo mi codigo, el formulario lo he creado desde la paleta de controles de netbeans.


Código (java) [Seleccionar]

public frmTest() {
       initComponents();  
       JPanel pnlcenter = new JPanel();
       for (int i = 0; i < 50; i++) {
           JButton btnAgrega = new JButton("Hola");
           pnlcenter.add(btnAgrega);
       }
       pnlcenter.setLayout(new FlowLayout());
       pnlcenter.setBorder(BorderFactory.createLineBorder(Color.black));
       pnlcenter.setBounds(0, 0, 200, 200);
       pnlcenter.setPreferredSize(new Dimension(2000, 2000));
       pnlcenter.setVisible(true);

       final JScrollPane scroller = new JScrollPane(pnlcenter, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
       scroller.setViewportView(pnlcenter);

       this.setSize(new Dimension(400, 400));
       this.add(scroller);
       this.pack();
       this.setLocationRelativeTo(null);
       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       this.setVisible(true);
}


Muchas gracias !!!!


que hace el metodo initComponents ?  >:D , intenta colaborar a la primera un poco mas para que algo tan simple no se nos haga eterno LMAOOO


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

GSecurity

Cita de: rub'n en  2 Febrero 2020, 22:04 PM

que hace el metodo initComponents ?  >:D , intenta colaborar a la primera un poco mas para que algo tan simple no se nos haga eterno LMAOOO


El initComponent es para que inicie el JFrame.... no entiendo cual es el problema?  :(  Help Me

rub'n

Cita de: GSecurity en 21 Marzo 2020, 06:12 AM
El initComponent es para que inicie el JFrame.... no entiendo cual es el problema?  :(  Help Me

Ayuda tu mas con el código, pasa mas código, seguro algo falta por ahí y de paso simple dog.


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

GSecurity

Cita de: rub'n en 21 Marzo 2020, 13:08 PM
Ayuda tu mas con el código, pasa mas código, seguro algo falta por ahí y de paso simple dog.

Pero es todo el codigo que tengo  :( porque no me creen:

Con este codigo hago que aparescan una serie de botones dentro de un jpanel.

Código (java) [Seleccionar]
   public frmTest() {
        initComponents();
       
        JPanel pnlcenter = new JPanel();
        for (int i = 0; i < 50; i++) {
            JButton btnAgrega = new JButton("Hola");
            pnlcenter.add(btnAgrega);
        }
        pnlcenter.setLayout(new FlowLayout());
        pnlcenter.setBorder(BorderFactory.createLineBorder(Color.black));
        pnlcenter.setBounds(0, 0, 200, 200);
        pnlcenter.setPreferredSize(new Dimension(2000, 2000));
        pnlcenter.setVisible(true);

        this.setSize(new Dimension(400, 400));
        this.add(pnlcenter);
    }


La idea es que me aparezca un scrollbar en la parte de la izquierda ya que mi intencion es agregar mas controles dentro del panel. Guiandome por internet agregue el siguiente codigo el cual me dicen que deberia funcionar pero nada  :( :


Código (java) [Seleccionar]
   public frmTest() {
        initComponents();
       
        JPanel pnlcenter = new JPanel();
        for (int i = 0; i < 50; i++) {
            JButton btnAgrega = new JButton("Hola");
            pnlcenter.add(btnAgrega);
        }
        pnlcenter.setLayout(new FlowLayout());
        pnlcenter.setBorder(BorderFactory.createLineBorder(Color.black));
        pnlcenter.setBounds(0, 0, 200, 200);
        pnlcenter.setPreferredSize(new Dimension(2000, 2000));
        pnlcenter.setVisible(true);

        final JScrollPane scroller = new JScrollPane(pnlcenter, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scroller.setViewportView(pnlcenter);
        this.setSize(new Dimension(400, 400));
        this.add(scroller);
        this.pack();
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }


El JFrame lo he creado desde la paleta del netbeans, es todo lo que tengo.

Help me !!

EdePC

- A mí si que me funciona. No muestras tu main ni tampoco initComponents así que el problema está ahí. En mi caso el initComponents me da problemas por lo que lo he comentado:

Código (java) [Seleccionar]
import java.awt.*;
import javax.swing.*;

public class frmTest extends JFrame {

  public frmTest() {
    //initComponents();

    JPanel pnlcenter = new JPanel();
    for (int i = 0; i < 50; i++) {
      JButton btnAgrega = new JButton("Hola");
      pnlcenter.add(btnAgrega);
    }
    pnlcenter.setLayout(new FlowLayout());
    pnlcenter.setBorder(BorderFactory.createLineBorder(Color.black));
    pnlcenter.setBounds(0, 0, 200, 200);
    pnlcenter.setPreferredSize(new Dimension(2000, 2000));
    pnlcenter.setVisible(true);

    final JScrollPane scroller = new JScrollPane(pnlcenter, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    scroller.setViewportView(pnlcenter);
    this.setSize(new Dimension(400, 400));
    this.add(scroller);
    this.pack();
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
  }

  public static void main(String[] args) {
    frmTest frm = new frmTest();
  }
}


- El código anterior funciona incluso sin usar NetBeans, desde un block de notas y compilando a mano con javac frmTest.java && java frmTest

- No te manda ningún error o advertencia? has hecho uno Click derecho > Clean a tu proyecto?