Java 我可以增加JPanel的大小吗?

Java 我可以增加JPanel的大小吗?,java,swing,jpanel,Java,Swing,Jpanel,我这里有一些代码,当按下按钮时,我试图扩展JPanel。然而,它仍然保持在以前的高度。有没有办法做到这一点,或者它是固定在创建时设置的尺寸上的 public class GUITest extends JFrame { JPanel jp; JButton one; public static void main(String[] args) { new GUITest(); } public GUITest() {

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

}
public类GUITest扩展了JFrame{
JPanel jp,;
按钮一;
公共静态void main(字符串[]args){
新吉他测试();
}
公共吉他测试(){
initWidgets();
}
公共void initWidgets(){
设置大小(250250);
setTitle(“拉伸面板示例”);
setDefaultCloseOperation(关闭时退出);
setLayout(新的FlowLayout());
一个=新的JButton(“单击我!”);
ActionListener extend=新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
对于(int i=0;i<80;i++){
jp.setPreferredSize(新尺寸(200,(i+70));
}
//System.out.println(jp.getHeight());
}
};
addActionListener(扩展);
添加(一个,BorderLayout.NORTH);
jp=新的JPanel();
jp.挫折背景(颜色:黑色);
jp.setPreferredSize(新尺寸(200,70));
添加(jp,BorderLayout.CENTER);
setVisible(真);
}
}

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


祝你今天愉快

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


祝你今天愉快

或者,单击按钮后,可以在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());
            }
public void actionPerformed(ActionEvent e){
对于(int i=0;i<80;i++){
jp.setPreferredSize(新尺寸(200,(i+70));
**jp.revalidate()**
}
//System.out.println(jp.getHeight());
}

为了澄清这一点,一旦更改尺寸,就必须重新绘制。事情已经改变了,但是没有人告诉它以可视化的方式更新更改

或者,您可以在单击按钮后在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());
            }
public void actionPerformed(ActionEvent e){
对于(int i=0;i<80;i++){
jp.setPreferredSize(新尺寸(200,(i+70));
**jp.revalidate()**
}
//System.out.println(jp.getHeight());
}
为了澄清这一点,一旦更改尺寸,就必须重新绘制。事情已经改变了,但还没有通知它以可视方式更新该更改

尝试以下操作:

jp.setSize(新尺寸(200,(i+70))

而不是
jp.setPreferredSize(新维度(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));
试试这个:

jp.setSize(新尺寸(200,(i+70))

而不是
jp.setPreferredSize(新维度(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));

@HovercraftFullOfEels在看过javadoc后,我看到它确实尊重首选尺寸……回答不好,对不起,已经删除了it@HovercraftFullOfEels在看了javadoc之后,我发现它确实尊重首选尺寸……回答不好,抱歉,已经删除了它的作品!但你知道我怎样才能让它滑翔吗?我曾尝试在每次迭代中短暂暂停线程,但它似乎不起作用+1用于重新验证()。您不能只是暂停线程,因为这将阻止GUI重新绘制自身。相反,你需要使用一个摆动计时器来安排动画。这很有效!但你知道我怎样才能让它滑翔吗?我曾尝试在每次迭代中短暂暂停线程,但它似乎不起作用+1用于重新验证()。您不能只是暂停线程,因为这将阻止GUI重新绘制自身。相反,您需要使用Swing计时器来安排动画。