У меня есть несколько идентичных расширенных экземпляров JPanel, каждый с прозрачным фоном, сделанный с помощью Color(255, 255, 255, 0);
.Когда mousePressed()
любого JPanel запускается, его фон устанавливается в сплошной цвет.
Проблема в том, что в течение первых нескольких миллисекунд после нажатия мыши (ленивец просто ее преодолеет) фон становится изображением JComponent, нажатым до .
Я надеюсь, что есть какой-то «очиститель памяти» или какой-то метод управления теми действиями JComponent, о которых я не знаю ...
edit:
addMouseListener(new MouseListener() {
boolean mousePressed;
public void mouseClicked(MouseEvent e) {}
Timer timer;
public void mousePressed(MouseEvent e) {
setBackground(new Color(255, 255, 255, 20));
setBorder(BorderFactory.createLineBorder(new Color(255, 255, 255, 100), 3));
repaint();
timer = new Timer();
mousePressed = true;
timer.scheduleAtFixedRate(new TimerTask() { //keep jpanel position relative to mouse position
Point pC = MouseInfo.getPointerInfo().getLocation();
Point pP = MouseInfo.getPointerInfo().getLocation();
Point sP = getLocation();
public void run() {
if(mousePressed) {
pC = MouseInfo.getPointerInfo().getLocation();
setLocation(sP.x + (pC.x - pP.x), sP.y + (pC.y - pP.y));
pP = pC;
sP = getLocation();
} else {
pC = MouseInfo.getPointerInfo().getLocation();
pP = MouseInfo.getPointerInfo().getLocation();
sP = getLocation();
}
}
}, 5, 5);
}
public void mouseReleased(MouseEvent e) {
mousePressed = false;
setBackground(null);
setBorder(null);
repaint();
timer.cancel();
}