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