繁体   English   中英

单击按钮后如何移动 Jcomponent 的 position?

[英]How can I move the position of my Jcomponent after I click a button?

所以我想在单击相应按钮后更改我作为 JComponent 实现的图像的 position,但是,单击相应按钮时它不会执行任何操作。

我认为问题可能出在我的 paintComponent 方法中,因为我希望图像一开始就绘制在面板的中央。

面板本身有一个 GridBagLayout,虽然我认为将它锚定在中心也无济于事,因为我想在单击按钮时移动图像并且只希望它在我打开时显示在面板的中心框架...

特别是对于此按钮,我希望我的 JComponent/图像向右移动 50 像素。

无论如何,这就是我所做的:

@Override 
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    int x = (this.getWidth() - img.getWidth(null))/2;
    int y = (this.getHeight() - img.getHeight(null))/2;
    
    g.drawImage(img, x, y, null);
}

@Override
public void actionPerformed(ActionEvent e) {
    img.repaint(img.getX()+50, img.getY(), img.getHeight(), img.getWidth());
}

目前,您的 paintComponent 方法始终对xy使用相同的值,因此图像不动也就不足为奇了。

xy是需要记住的state 这是通过定义实例字段来完成的:

private int x;
private int y;

您不能在构造时初始化它们,因为组件在创建时(通常)的宽度和高度为零。 幸运的是,有一种方法可以告诉您何时为组件指定了宽度和高度; 该方法是addNotify ,您可以而且应该覆盖它:

@Override
public void addNotify() {
    super.addNotify();

    x = (this.getWidth() - img.getWidth(this)) / 2;
    y = (this.getHeight() - img.getHeight(this)) / 2; 
}

请注意,您应该this (您的组件实例)传递给需要 ImageObserver 参数的任何方法,而不是 null。

现在 paintComponent 不需要做任何计算。 它只是在xy恰好是的任何位置绘制图像:

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(img, x, y, this);
}

现在您的坐标是实例字段,您可以直接更改它们:

@Override
public void actionPerformed(ActionEvent event) {
    x += 50;
    repaint();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM