mino
mino

Reputation: 7288

Can I increase the size of a JPanel?

I have some code here, and when the button is pressed, I'm trying to extend the JPanel. However, it remains at the height it was previously. Is there a way to do this or is it fixed on the dimensions it was set when it was created?

public class GUITest extends JFrame {

    JPanel jp;
    JButton one;

    public static void main(String[] args) {
        new GUITest();
    }

    public GUITest() {
        initWidgets();
    }

    public void initWidgets() {
        setSize(250, 250);
        setTitle("Stretch Panel Example");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        one = new JButton("Click me!");
        ActionListener extend = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                for (int i = 0; i < 80; i++) {
                    jp.setPreferredSize(new Dimension(200,(i+70)));
                }
                //System.out.println(jp.getHeight());
            }
        };
        one.addActionListener(extend);
        add(one, BorderLayout.NORTH);
        jp = new JPanel();
        jp.setBackground(Color.BLACK);
        jp.setPreferredSize(new Dimension(200,70));
        add(jp, BorderLayout.CENTER);
        setVisible(true);
    }

}

Upvotes: 0

Views: 3592

Answers (3)

Arpit
Arpit

Reputation: 12797

try this:

jp.setSize(new Dimension(200,(i+70)));

instead of jp.setPreferredSize(new Dimension(200,(i+70)));

in this code on eachclick the size will be increase by 10 :

ActionListener extend = new ActionListener() {
            int count=0;
            public void actionPerformed(ActionEvent e) {
                    count=count+10;
                    jp.setSize(new Dimension(100+count,70+count));  
                System.out.println("in listener");
            }
        };

one more thing setPrefferedsize is the default size which is called whenever component re-validates. to change the setPrefferedSize on each click :

   count=count+10;
                jp.setSize(new Dimension(100+count,70+count));  
        jp.setPreferredSize(new Dimension(100+count,70+count));

Upvotes: 0

Jeff Hawthorne
Jeff Hawthorne

Reputation: 568

alternatively, you can call revalidate() on the jpanel after the button click

public void actionPerformed(ActionEvent e) {
                for (int i = 0; i < 80; i++) {
                    jp.setPreferredSize(new Dimension(200,(i+70)));
                    **jp.revalidate();**
                }
                //System.out.println(jp.getHeight());
            }

to clarify, once you change the dimensions, it has to be redrawn. the thing has been changed, but it hasn't been told to update that change visually

Upvotes: 3

JGutierrezC
JGutierrezC

Reputation: 4513

You should use the validate() method in order to do that. I hope i was able to help!

Have a great day!

Upvotes: 0

Related Questions