gpt4 book ai didi

Java Swing GlassPane 拖动性能

转载 作者:行者123 更新时间:2023-11-30 05:01:43 24 4
gpt4 key购买 nike

我正在尝试使用 GlassPane 在 Swing 应用程序中进行可视化拖放,但遇到了拖动图像滞后于鼠标指针的问题,有时甚至相当严重。我该如何解决这个问题?我的 GlassPane 代码如下。谢谢!

package dragui;

import java.awt.*;
import javax.swing.*;
import java.awt.event.MouseEvent;
import javax.swing.event.MouseInputAdapter;

public class GlassPane extends JComponent {
private int x=0, y=0, k=25,z=1;
private boolean showDot;
private MouseInputAdapter mia = new MouseInputAdapter(){

@Override
public void mouseDragged(MouseEvent me) {
setPos(me.getX(), me.getY());
}

@Override
public void mousePressed(MouseEvent me) {
setShow(true);
setPos(me.getX(), me.getY());
}

@Override
public void mouseReleased(MouseEvent me){
setShow(false);
setVisible(false);
}
};

public void setShow(boolean b){ this.showDot = b; }

public void paint(Graphics g) {
if (showDot) {
g.setColor(new Color(0.0f, 0.25f, 1.0f));
g.fillOval(x - k, y - k, 2*k, 2*k);
}
}

public void setPos(int x, int y) {
int tmpX = this.x, tmpY = this.y;
this.x = x; this.y = y;
repaint(tmpX - k , tmpY-k, 2*k+5, 2*k+5);
repaint(this.x-k, this.y-k, 2*k+5, 2*k+5);
}

public GlassPane() {
addMouseListener(mia);
addMouseMotionListener(mia);
setOpaque(false);
}
}

最佳答案

根据Javadoc ,

A subclass that just wants to specialize the UI (look and feel) delegate's paint method should just override paintComponent.

这是因为 paint(...) 实际上将绘画工作委托(delegate)给了三个 protected 方法:paintComponentpaintBorderpaintChildren。话虽这么说,请尝试用此替换 paint(...)

@Override
protected void paintComponent(Graphics g) {
if (showDot) {
Graphics gCopy = g.create();

gCopy.setColor(new Color(0.0f, 0.25f, 1.0f));
gCopy.fillOval(x - k, y - k, 2*k, 2*k);

gCopy.dispose();
}
}

关于Java Swing GlassPane 拖动性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6453743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com