我可以增加JPanel的大小吗?

时间:2013-02-06 16:21:46

标签: java swing jpanel

我在这里有一些代码,当按下按钮时,我正在尝试扩展JPanel。但是,它仍然保持在以前的高度。有没有办法做到这一点,还是修改了它创建时设置的尺寸?

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);
    }

}

3 个答案:

答案 0 :(得分:3)

或者,您可以在按钮单击

后在jpanel上调用revalidate()
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());
            }

澄清一下,一旦你改变尺寸,它就必须重新绘制。事情已被改变,但尚未被告知要直观地更新该改变

答案 1 :(得分:0)

您应该使用validate()方法来执行此操作。 我希望我能帮忙!

祝你有美好的一天!

答案 2 :(得分:0)

试试这个:

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

而不是jp.setPreferredSize(new Dimension(200,(i+70)));

在此代码中每次点击大小将增加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");
            }
        };

另外一件事setPrefferedsize是默认大小,只要组件重新验证就会调用它。在每次点击时更改setPrefferedSize:

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