Java 我可以增加JPanel的大小吗?
我这里有一些代码,当按下按钮时,我试图扩展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() {
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计时器来安排动画。