carookee - group communication for you
Home / JavaForum / Swing + AWT
Infos   |   Features   |   Gold-Edition   |   Kundenservice   
java
  Übersicht
  Forum
Beginner
Java allgemein
JDBC
JNI
Networking
Online-Ressourcen
Swing + AWT
XML
Meckerecke
  Mitglieder
LOGIN





· Passwort vergessen
· Kostenlos anmelden
  Information
  Demo
  Features
  Im Vergleich
  Anmeldung
SUCHE
Beiträge, Foren oder Verfasser finden:
  Kundenservice
  Impressum
  Datenschutz
  AGB
Status
5.071 User online
1 User eingeloggt
 

Beiträge
   Antworten     Neuer Beitrag    

Beitrag 1272 von 1460 (87%) |<   <   >   >|

Autor Gast
Datum 04.01.02, 17:27
Betreff Re: Transparente Panels oder Container


Dieses Program hat zwei Probleme, erstends falckert es wie gestört und zweitens sollte der Weisse Rahmen um den blauen Kreis nicht erschienen, da ich dort einen Alpha Wert von 0, also völlig Transparent angegeben haben. Ich habe diesen Code schnell geschrieben, um mein Problem darzustellen, natürlich ist mir klar, dass dieses wenig sinnvoll ist, doch ich denke, es kann die Probleme hervorragend darstellen...
Es zeigt auch, dass das Problem mit der Transparenz nur bei der Hintergrundfarbe nicht aber im allgemeinen Auftritt...
Sie mögen sich vermutlich fragen, wesshalb die Mühe mit dem Dialogelement, doch cih mus das ganz in Form eines Dialogelemts machen, da ich sonst die Eventlistener für das Ganze Fenster registrieren und dann für jede noch so kleine Bewegung die Position des Mauszeigers abfragen und mit der Position des Elements vergelichen, was nicht gerade für Performance sorgen würde...
Ihr könnt diesen Code gerne auf eurem JDK kompilieren und anschliessend ausprobieren um euch die Schweinerei anzusehen !!!

import java.awt.*;
import java.awt.event.*;

public class forschung {
    public static void main(String[] args){
        Fenster wnd = new Fenster(new Dimension(640,480)); // Instanzierung eines Objekts aus der Klasse Fenster im Format [640,480]...
        wnd.setVisible(true); // Fenster sichbar machen, nachdem das Fenster konstruiert und die paint() Methode ausgeführt wurde...
    }
}

class Fenster
extends Frame{ // Ableitung aus java.awt.frame
    public Fenster(Dimension size){
        this.setSize(size.width,size.height);
        this.setBackground(Color.lightGray);
        this.setLayout(null);
        this.add(new eigenesDialogElement(new Rectangle(50,50,100,100)));
    }
    
    public void paint(Graphics g){ // Hintergrund Zeichnen...
        int posLeft = this.getInsets().left; // Linke StartPosition der Kachelung
        int posRight = this.getWidth() - this.getInsets().right; // Letzte Kachel horizontal
        int posTop = this.getInsets().top; // Obere Startposition der Kachelung
        int posBottom = this.getHeight() - this.getInsets().bottom; // Letzte Kachel vertikal
        int size = 20; // Grösse der einzelnen Kacheln
        
        for(int i = posTop;i < posBottom;i += size){
            for(int r = posLeft; r < posRight; r+=size){
                g.drawRect(r,posTop,size,size);
            }
            posTop += size;
        }
    }
}

class eigenesDialogElement // Eigenes Dialogelement aus einem Recheck bestehend, leuchtet auf, wenn man mit der Maus darüberfährt...
extends Canvas
implements Runnable{
    private int width, height;
    private Color delta,rect; // Farben des Dreieck Polygons und dem darübergelegten Rechteck...
    private int alpha; // AlphaWert
    private boolean EEflag; // Entered / Exited flag ( Mouse );
    private Thread th;
    
    public eigenesDialogElement(Rectangle Properties){
        this.setBounds(Properties);
        this.setBackground(new Color(255,255,255,0)); // Hier ist das Problem, dieser Alphawert hat keine Auswirkung auf das Programm...
        this.width = Properties.width;
        this.height = Properties.height;
        this.enableEvents(AWTEvent.MOUSE_EVENT_MASK); // Mouse Events aktivieren
        this.delta = new Color(255,0,0);
        this.rect = new Color(0,0,255);
        this.alpha = 255;
    }
    
    public void paint(Graphics g){ // Graphische Darstellung des Dialogelements
        
        int[] x = {5,45,90};
        int[] y = {90,5,90};
        
        g.setColor(this.delta);
        g.fillPolygon(new Polygon(x,y,3));
        g.setColor(this.rect);
        g.fillOval(5,5,this.width-10,this.height-10);
    }
    
    public void processMouseEvent(MouseEvent event){ // Thread starten
        if(event.getID() == event.MOUSE_ENTERED){
            this.th = new Thread(this);
            this.EEflag = true;
            this.th.start();
        }
        else if(event.getID() == event.MOUSE_EXITED){ // Das Entered Flag auf false setzen, damit der Thread beginnt, rückwärts zu zählen und sich bei 0 selbst zerstört...
            this.EEflag = false;
        }
    }
    
    public void run(){
        while(!Thread.interrupted()){
            try{
                this.th.sleep(20); // Timer setzen
            }
            catch(InterruptedException e){
                this.th.interrupt();
            }
            
            if(this.EEflag && this.alpha > 0){
                this.rect = new Color(0,0,255,this.alpha-=1); // Transparenz erhöhen
            }
            else{
                if(this.alpha < 255 ){
                    this.rect = new Color(0,0,255,this.alpha+=1); // Transparenz ernidrigen
                }
                else{
                    this.th.interrupt(); // Thread zerstören, wenn Transparenz bei 255, also völlig undurchsichtig
                }
            }
            this.repaint();
        }
    }
}



Diskussionsverlauf:
                    Geschafft
    Re: Transparente Panels oder Container
        Re: Transparente Panels oder Container
            Re: Transparente Panels oder Container
                Re: Transparente Panels oder Container
Transparente Panels oder Container

 Auf diesen Beitrag antworten
 Neuen Beitrag verfassen


|<   <   >   >|

                                                                                                                                                                                                                           

Impressum  · Datenschutz  · AGB  · Infos  · Presse
Ein modernes Forum: teamturn.com