0

我这里有一些代码,当按下按钮时,我正在尝试扩展 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);
    }

}
4

3 回答 3

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

澄清一下,一旦你改变了尺寸,它就必须重新绘制。事情已经改变,但没有被告知要在视觉上更新该更改

于 2013-02-06T16:28:31.610 回答
0

您应该使用该validate()方法来做到这一点。我希望我能提供帮助!

祝你有美好的一天!

于 2013-02-06T16:27:46.680 回答
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");
            }
        };

另一件事 setPreferedsize 是组件重新验证时调用的默认大小。在每次点击时更改 setPreferedSize :

   count=count+10;
                jp.setSize(new Dimension(100+count,70+count));  
        jp.setPreferredSize(new Dimension(100+count,70+count));
于 2013-02-06T16:33:36.843 回答