M
modad
Gast
Tag Zusammen,
hab folgende Problem: Ich würde gerne ein JPanel einblenden lassen. Dazu habe ich mir gedacht mache ich einen Thread auf, den ich im "paint()" starte, und der dann x-mal die super-Paint Methode aufruft, mit erhöhter Transparenz. Transparenz generell geht, hab das ganze schon mal erfolgreich ohne Thread mit einem Frame gemacht (durch eine "einfache" While Schleife, was zum einen natürlich suboptimal ist, weil die EinblendGeschwindigkeit dann vom System abhängt, und bei meinem Panel hat das irgendwie nicht hin gehauen)
Jemand eine Idee, warum die Einblendung hier nicht statt findet? Meine Vermutung wäre ja ein Problem beim Zeichen der GUI, das die Threads sich in die quere kommen, aber bin in der Thread-Geschichte nicht so drin als das ich das beurteilen könnte
hab folgende Problem: Ich würde gerne ein JPanel einblenden lassen. Dazu habe ich mir gedacht mache ich einen Thread auf, den ich im "paint()" starte, und der dann x-mal die super-Paint Methode aufruft, mit erhöhter Transparenz. Transparenz generell geht, hab das ganze schon mal erfolgreich ohne Thread mit einem Frame gemacht (durch eine "einfache" While Schleife, was zum einen natürlich suboptimal ist, weil die EinblendGeschwindigkeit dann vom System abhängt, und bei meinem Panel hat das irgendwie nicht hin gehauen)
Jemand eine Idee, warum die Einblendung hier nicht statt findet? Meine Vermutung wäre ja ein Problem beim Zeichen der GUI, das die Threads sich in die quere kommen, aber bin in der Thread-Geschichte nicht so drin als das ich das beurteilen könnte
Code:
package dd.servlets;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Composite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TestPanel extends JPanel implements Runnable {
private Graphics gg;
private float alpha;
public TestPanel() {
super();
this.setBackground(Color.RED);
alpha = 0.00f;
}
@Override
public void paint(Graphics g) {
// Transparenz generell geht:
// Composite
// alphaCompositge=AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
// 0.1f);
// ((Graphics2D)g).setComposite(alphaCompositge);
// super.paint(g);
// Im Thread geht es nicht:
if (alpha == 0.00f) {
Thread t = new Thread(this);
gg = g;
t.start();
} else {
super.paint(g);
}
}
private void paintIt(Graphics g, float alpha) {
Composite alphaCompositge = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.1f);
((Graphics2D) g).setComposite(alphaCompositge);
super.paint(g);
}
public void run() {
while (alpha < 1.00f) {
alpha = alpha + 0.01f;
System.out.println("Paint: " + alpha);
paintIt(gg, alpha);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}