【发布时间】:2023-03-04 10:53:01
【问题描述】:
最初的问题是为什么 .getSize() 在组件调整大小后不返回 JCompnent 的实际大小:.getSize() isn't updated
相反,我在 JScrollPane 中添加了一个 JPanel,并使用 scrollRectToVisible() 来更新 getSize()。考虑这个小例子:
import java.awt.*;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import javax.swing.*;
public class Test extends JFrame implements MouseWheelListener{
JPanel p,p2;
JScrollPane js;
Test(){
setLayout(new FlowLayout());
setPreferredSize(new Dimension(1000,1000));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
p = new JPanel();
p.setPreferredSize(new Dimension(200,200));
p2=new JPanel();
p2.setPreferredSize(new Dimension(20,20));
p2.setBackground(Color.green);
p.add(p2);
js = new JScrollPane(p);
add(js);
addMouseWheelListener(this);
pack();
}
public static void main(String args[]){
new Test();
}
public void mouseWheelMoved(MouseWheelEvent e) {
System.out.println(p2.getSize());
p2.setPreferredSize(new Dimension(100,100));
p2.revalidate();
p2.scrollRectToVisible(new Rectangle(1,1,1,1));
System.out.println(p2.getSize());
}
}
滚动鼠标滚轮后,单击一下绿色方块的大小。该程序还会打印出正确的尺寸。但是,如果我删除了 scrollRectToVisible(1,1,1,1) 正方形被调整大小,但 它打印出错误的大小。问题是:
- 除了调用 scrollRectToVisible 来更新 getSize() 之外,还有其他方法吗?
- 如果在 jscollpane 中没有添加正方形怎么办,如.getSize() isn't updated 中的示例,是否有相应的更新函数?
【问题讨论】:
标签: java swing jframe jpanel jscrollpane