我有一个课程延伸JPanel.我覆盖了protected void paintComponent(Graphics g).
当面板的尺寸发生变化时,必须重新计算变量.我该如何正确地做到这一点?
Cha*_*nia 30
就像Adam Paynter建议的那样,你也可以在你的代码中添加一个内部类,如下所示:
class ResizeListener extends ComponentAdapter {
public void componentResized(ComponentEvent e) {
// Recalculate the variable you mentioned
}
}
Run Code Online (Sandbox Code Playgroud)
每次调整组件大小时,都会在最里面的括号之间输入代码.
然后将此侦听器添加到组件中
myJPanel.addComponentListener(new ResizeListener());
Run Code Online (Sandbox Code Playgroud)
您可以使用以获取组件e.getComponent().这样你就可以从内部类中调用组件的任何方法
e.getComponent().getWeight();
Run Code Online (Sandbox Code Playgroud)
Ada*_*ter 17
我想你可以覆盖各种setSize与resize方法和执行计算那里.但是,您可能找不到可以更改大小的所有位置.您可能希望让您的类实现ComponentListener并简单地监听自己的resize事件.
警告:我不是Swing专家.
警告:我还没有编译这段代码.
public class MyJPanel extends JPanel implements ComponentListener {
public MyJPanel() {
this.addComponentListener(this);
}
public void paintComponent(Graphics g) {
// Paint, paint, paint...
}
public void componentResized(ComponentEvent e) {
// Perform calculation here
}
public void componentHidden(ComponentEvent e) {}
public void componentMoved(ComponentEvent e) {}
public void componentShown(ComponentEvent e) {}
}
Run Code Online (Sandbox Code Playgroud)
如果计算不耗时,我只会在paintComponent().
否则,您可以保存一个作为组件大小的值,并根据 中的新大小进行检查paintComponent。如果大小改变,则重新计算,否则不要。
private Dimension size;
protected void paintComponent(Graphics g){
if (!size.equals(getSize())){
size = getSize();
// recalculate value
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以对调整大小事件进行计算。
//in the constructor add the line
addComponentListener(resizeListener);
private ComponentListener resizeListener = new ComponentAdapter(){
public void componentResized(ActionEvent e){
// recalculate value
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36017 次 |
| 最近记录: |