F
FMeise
Gast
Hallo,
ich habe folgendes kleines Test Programm geschrieben:
Das Programm zeichnet drei Shapes, die durscheinend sein sollen. Bei jedem Mausklick auf das Fenster wird neu gezeichnet. Wenn ich jetzt mehrmals schell hintereinander klicke, gehen MouseEvents verloren (sieht man an den Contern).
Das ganze scheint wohl am AlphaComposite.getInstance zu liegen, das anscheinend sehr viel Zeit benötigt. Ist das normal, oder mache ich etwas falsch.
Danke schon mal im voraus für eure Antworten.
Chris
PS: Eigentlich möchte ich erreichen, dass ich Shapes auf eine Zeichenfläche malen kann und diese dann langsam verblassen, sprich immer transparenter werden, bis ich sie dann schließlich lösche. Wenn ich aber jedes mal das Composite neu setzte, wird meine paint-Methode viel zu lansam.
ich habe folgendes kleines Test Programm geschrieben:
Code:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
import javax.swing.*;
public class Main extends JPanel
{
private Rectangle2D[] r = {new Rectangle2D.Double(10, 50, 100, 100),
new Rectangle2D.Double(50, 100, 100, 100),
new Rectangle2D.Double(100, 150, 100, 100)};
private int clickCounter = 0;
private int repaintCounter = 0;
public Main()
{
addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
clickCounter++;
repaint();
}
});
}
protected void paintComponent( Graphics g )
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
repaintCounter++;
g2d.drawString("Mouse clicks: " + clickCounter + " - Repainted: " + repaintCounter, 10, 12);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
g2d.setColor(Color.BLUE);
g2d.fill(r[0]);
g2d.setColor(Color.RED);
g2d.fill(r[1]);
g2d.setColor(Color.GREEN);
g2d.fill(r[2]);
}
public static void main( String args[] )
{
JFrame f = new JFrame( "Main" );
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.getContentPane().add( new Main() );
f.setSize( 250, 300 );
f.setVisible( true );
}
}
Das Programm zeichnet drei Shapes, die durscheinend sein sollen. Bei jedem Mausklick auf das Fenster wird neu gezeichnet. Wenn ich jetzt mehrmals schell hintereinander klicke, gehen MouseEvents verloren (sieht man an den Contern).
Das ganze scheint wohl am AlphaComposite.getInstance zu liegen, das anscheinend sehr viel Zeit benötigt. Ist das normal, oder mache ich etwas falsch.
Danke schon mal im voraus für eure Antworten.
Chris
PS: Eigentlich möchte ich erreichen, dass ich Shapes auf eine Zeichenfläche malen kann und diese dann langsam verblassen, sprich immer transparenter werden, bis ich sie dann schließlich lösche. Wenn ich aber jedes mal das Composite neu setzte, wird meine paint-Methode viel zu lansam.