Guten Tag alle zusammen,
hab mir jetzt in den Kopf gesetzt, meine Programme ein bisschen dynamischer aussehen zu lassen. Ich arbeite hierbei viel mit awt Graphics und möchte Farbübergänge (z.B. wenn der user mit der maus über ein Element geht) machen. Mein Testcode schaut so aus:
allerdings hat man ein sehr unruhiges Flackern wenn man mit der Maus über das Element geht. Es sieht immer so aus, wie wenn es kurz dunkler werden würde, bevor es wieder hell wird.
Liegt es einfach an meiner sleep-zeit und meiner step-größe, hab ich irgendeinen groben performance-schnitzer oder gehts einfach nicht besser?
Gruß,
javampir
hab mir jetzt in den Kopf gesetzt, meine Programme ein bisschen dynamischer aussehen zu lassen. Ich arbeite hierbei viel mit awt Graphics und möchte Farbübergänge (z.B. wenn der user mit der maus über ein Element geht) machen. Mein Testcode schaut so aus:
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Gui extends JPanel implements MouseMotionListener {
public static void main(String[] args) {
new Gui();
}
JFrame f = new JFrame("Fade");
int x = 20, y = 20, w = 100, h = 100;
volatile Color col = Color.black;
boolean in = false;
public Gui() {
super();
setBackground(Color.white);
addMouseMotionListener(this);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.setExtendedState(JFrame.MAXIMIZED_BOTH);
f.setVisible(true);
}
private boolean over(int ix, int iy) {
if(ix >= x && ix <= x + w && iy >= y && iy <= y + h) {
return true;
}
return false;
}
private void fadeIn() {
new Thread(new Runnable() {
@Override
public synchronized void run() {
if(!in) {
int r = 0;
for(int i = 0; i < 127; i++) {
r += 2;
col = new Color(r, 0, 0);
repaint();
try {
Thread.sleep(30);
} catch (Exception ex) {}
}
in = true;
}
}
}).start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(col);
g.fillRect(x, y, w, h);
}
@Override
public void mouseMoved(MouseEvent e) {
if(over(e.getX(), e.getY())) {
fadeIn();
}
}
@Override
public void mouseDragged(MouseEvent e) {
mouseMoved(e);
}
}
allerdings hat man ein sehr unruhiges Flackern wenn man mit der Maus über das Element geht. Es sieht immer so aus, wie wenn es kurz dunkler werden würde, bevor es wieder hell wird.
Liegt es einfach an meiner sleep-zeit und meiner step-größe, hab ich irgendeinen groben performance-schnitzer oder gehts einfach nicht besser?
Gruß,
javampir