user2263811
user2263811

Reputation: 13

Dynamic Buttons with ScrollPane java

I want create dynamic buttons (15 for example) but i can see them all in the screen (450,450), i try with scrollpane but i have no results. the idea is simple create X button and have the posibility to scroll vertical in the screen (button are center in the screen)

This is the code but i dont know who to make scrollpane work well.. always have the same results (i dont include scrollpane code )

public class Consulta2 extends JFrame {

    private JPanel contentPane;
    private JLabel label;
    private JButton boton;


    public Consulta2() {




        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(450, 450);  
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);


        int x=50;
        for (int i=0;i<10;i++){


         JButton boton = new JButton("oli");

            GroupLayout gl_contentPane1 = new GroupLayout(contentPane);
            gl_contentPane1.setHorizontalGroup(
                gl_contentPane1.createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_contentPane1.createSequentialGroup()
                        .addGap(163)
                        .addComponent(boton)
                        .addContainerGap(172, Short.MAX_VALUE))
            );
            gl_contentPane1.setVerticalGroup(
                gl_contentPane1.createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_contentPane1.createSequentialGroup()
                        .addGap(50+x)
                        .addComponent(boton)
                        .addContainerGap(229, Short.MAX_VALUE))
            );
            contentPane.setLayout(gl_contentPane1);

            x=x+50;
         //contentPane.add(boton);


         setVisible(true);  
        }

         label = new JLabel("New label");
        GroupLayout gl_contentPane = new GroupLayout(contentPane);
        gl_contentPane.setHorizontalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_contentPane.createSequentialGroup()
                    .addGap(183)
                    .addComponent(label))
        );
        gl_contentPane.setVerticalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_contentPane.createSequentialGroup()
                    .addGap(68)
                    .addComponent(label))
        );
        contentPane.setLayout(gl_contentPane);

        Dimension tamFrame=this.getSize();//para obtener las dimensiones del frame
        Dimension tamPantalla=Toolkit.getDefaultToolkit().getScreenSize();      //para obtener el tamanio de la pantalla
        setLocation((tamPantalla.width-tamFrame.width)/2, (tamPantalla.height-tamFrame.height)/2);  //para posicionar
        setVisible(true);  



    }


    public void mostrar()
    {
        setVisible(true);
    }


    public void setText(String string) {
        //JLabel label = new JLabel();
        label.setText(string);

    }
}

http://imageshack.us/photo/my-images/94/45985657.jpg/

Upvotes: 0

Views: 2534

Answers (1)

I quickly made this in a JFrame. It works for me.

    // the panel
    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new GridBagLayout());
    buttonPanel.setSize(new Dimension(400, 300)); // whatever

    // the scrollpane
    JScrollPane pane = new JScrollPane();
    pane.setSize(new Dimension(400, 300)); // whatever

    // GridBagConstraint for button
    GridBagConstraints constraint = new GridBagConstraints();
    constraint.anchor = GridBagConstraints.CENTER;
    constraint.fill = GridBagConstraints.NONE;
    constraint.gridx = 0;
    constraint.gridy = GridBagConstraints.RELATIVE;
    constraint.weightx = 1.0f;
    constraint.weighty = 1.0f;

    int sizeOfButtons = 50;
    for(int i = 0; i < sizeOfButtons; i++) {
        JButton button = new JButton();

        button.setText("Button #" + i);

        // other attributes you will set

        buttonPanel.add(button, constraint);
    }

    pane.setViewportView(buttonPanel);
    this.rootPane.add(pane); // or other panel etc.
    pane.updateUI();

Upvotes: 2

Related Questions