# Etwas durchsichtig machen über einem Panel



## Chickenwarrior (9. Jan 2012)

Mein bot, welcher von Thread erbt, soll durchsichtig sein und saust über einem Panel. Nebenbei gibt es aber auch noch nicht durchsichtige. Wie soll ich das anstellen? Aus anderen Foren werd ich nicht schlau 
Edit: Also nicht unsichtbar, sondern nur durchlässig, also transparent...


----------



## ...ButAlive (9. Jan 2012)

Du musst doch nur setDurchsichtig aufrufen....


```
public class Bot
	extends Thread
{
	private boolean durchsichtig;
	
	public void setDurchsichtig(boolean durchsichtig)
	{
		this.durchsichtig = durchsichtig;
	}
	
	public void sauseUeberPanel(JPanel panel)
	{
	}
}
```

Ne ernsthaft, kannst du deine Frage etwas präzisieren, und uns ein bisschen näher erklären um was für einen Bot es sich handelt und was genau du machen willst. Am Besten wäre, wenn du deinen bisherigen Code zeigen würdest.


----------



## XHelp (9. Jan 2012)

Was ist denn ein "Bot" und wie "saust" er denn zur Zeit "über einem Panel"?


----------



## HimBromBeere (9. Jan 2012)

Also mir fiele spontan nur ein, die PaintComponent-Methode der Panels zu überschreiben:

```
g2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f));
```


Vlcht. hilft´s ja

EDIT: Habe grade hier noch eine andere Variante entdeckt, die für JFrame funktioniert, keine Ahnung, ob das auch für´n Panel geht oder ob sich deine Anwendung auch auf ein JFramje umändern lässt... musste im Zweifelsfall mal schauen...
http://www.java-forum.org/awt-swing-swt/129920-fenster-grafik-ueberlappen.html


----------



## irgendjemand (10. Jan 2012)

alternativ wäre wohl noch "setOpaque(bool)" zu erwähnen *in anspielung auf das "setDurchsichtig(bool)"


----------



## Chickenwarrior (10. Jan 2012)

Das ist wohl nur Humor, den Progger lustig finden.

Hier bot mal ganz abgespeckt:

```
public class bot extends Thread {
    public double x_position, y_position, vx,vy;
          x_position+=vx;
          y_position+=vy;
}
```

Und hier Animation, auf dem das stattfindet:

```
package schwarm;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;

public class Animation extends javax.swing.JPanel {

    private Liste Botliste;
    public Animation() {
        initComponents();
    }
    public void set_botliste(Liste b)
    {
        Botliste=b;
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        setName("Form"); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }// </editor-fold>                        
    // Variables declaration - do not modify                     
    // End of variables declaration                   
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
    if(Botliste!=null){
        {Knoten aktuell=Botliste.getStart();
            while(aktuell!=null)
            {
                g.fillOval(aktuell.getBot().getx(), aktuell.getBot().gety(), 12, 12);
                aktuell=aktuell.getNF();
            }
        }
    }
```
Es werden wohl ein paar geschweifte Klammern am Ende fehlen, aber die sind nur in dem hier rein kopierten Code nicht vorhanden.


----------



## Michael... (10. Jan 2012)

Du musst ersteinmal in der überschrieben paintComponent erkennen welcher "Bot" transparent dargestellt werden soll und diesen dann mit einer transparenten Farbe zeichnen. s. Color(int, int, int, int)
Aktuell werden ja alle Bots / Kreise mit der Standardfarbe des Panels gezeichnet.


----------



## Chickenwarrior (11. Jan 2012)

Michael... hat gesagt.:


> Du musst ersteinmal in der überschrieben paintComponent erkennen welcher "Bot" transparent dargestellt werden soll und diesen dann mit einer transparenten Farbe zeichnen. s. Color(int, int, int, int)
> Aktuell werden ja alle Bots / Kreise mit der Standardfarbe des Panels gezeichnet.



Die Lösungen sind so leicht, dass man sie nie findet


----------

