Java Swing - Transparenz bei JScrollPane

Neue Frage »

Auf diesen Beitrag antworten »
David1979 Java Swing - Transparenz bei JScrollPane

Hallo zusammen,

ich wollte vor kurzem eine JScrollPane, wo eine JTextArea eingebettet ist transparent machen. Irgendwie hat aber alles, was ich ausprobiert habe, nicht hingehauen.

Als erstes habe ich probiert über die normalen Swing-Methoden eine Transparenz herzustellen, indem ich die Rahmen ausgeschaltet und die Hintergrundfarbe transparent gesetzt habe. Der Effekt war, dass ich zwar beim Starten der Applikation zunächst die gewollte Transparenz hatte, aber sobald man den Cursor in das Feld hineinsetzt, wird ein Bildausschnitt der Applikation von der linken oberen Ecke in Ausmaßen der Scrollpane unter das JTextfield gezeichnet. Sieht ganz witzig aus, wie eine Art Spiegelung.

Dann bin ich hingegangen und habe mir den Bildausschnitt der hinter der Scrollpane transparent sein soll, als Grafik fertig gebastelt und anschließend das Image in der paint Methode auf die Textarea zeichnen lassen. Das funktioniert, aber auch nur bis man zu dem Punkt kommt, wo das Feld anfängt zu scollen.

Hat jemand schon mal Erfahrungen mit sowas gemacht?

JDK 1.5
 
Auf diesen Beitrag antworten »
kurellajunior

Verschoben weil eine programmiertechnische Frage.

Leider damit noch keine ERfahrungen gemacht. Für solche diffiziele Fragen empfehle ich ein reines JAva-Swing-Forum.
Wir sind dabei eine Liste mit Verweisen zu erstellen. Ich hoffe jemand anders kann Dir besser helfen.

Jan
Auf diesen Beitrag antworten »
David1979

Kein Ding smile

Trotzdem danke für die Zeit!

Gruß David

P.S.: Hab auch schon in anderen Foren recherchiert... leider nie fündig geworden. Aber man gibt die Suche ja nicht auf smile
Auf diesen Beitrag antworten »
kurellajunior

Aus neugier: warum eigentlich ein Scrollpane Durchsichtig machen?

Wo ist der Sinn? vielleicht findet sich ja eine einfachere Lösung...

Anonsten empfehle ich das Zeichnen in der paint() methode mit dem Scroll-offset, der sollte ermittelbar sein Augenzwinkern
 
Auf diesen Beitrag antworten »
David1979

Ist wahrscheinlich eine Macke von mir, aber ich verpasse den meisten meiner selbstgebastelten Applikationen auch ein eigenes Design. Das ist bestimmt nicht zwingend notwendig (weil auch viel Zeit dafür drauf geht), aber meiner Meinung nach fördert es die Benutzerakzeptanz, wenn man das Programm auch optisch an die Zielgruppe anpasst ist. Ungefähr so, wie das Design von Internetseiten, die sich auch oft mit dem Inhalt und/oder Motto identifizieren.

Hier war nun der Fall, dass ich einen leichten Farbverlauf im Hintergrund habe. Eine JTextArea wird für Protokollzwecke eingesetzt. Nun habe ich mir diesmal ein Layout zusammengestellt, das hauptsächlich leicht abgerundete Elemente besitzt (Buttons durch abgerundete Bilder ersetzt). Das einzige, was irgendwie nicht ins Bild gepasst hat, war halt die Protokollfläche, weil sie zum einen eckige Kanten besitzt und zum anderen den Farbverlauf überdeckt hat. Transparenz wäre da eine Lösung gewesen. (Mit dem Manko der Scrollleiste, aber da hab ich mich noch nicht herangetrautsmile ).

Ein großer Nachteil ist natürlich, dass man oft keine Layoutmanager mehr einsetzen kann, wenn man Farbverläufe benutzt. Das macht die ganze Sache ziemlich statisch und käme für größere Applikationen nicht in Frage, weil man dort auch oft an der Fenstergröße regelt. In diesem Fall müsste man wirklich alle Elemente intern zeichnen lassen.

Aber da ich bislang nur kleinere, widgetähnliche Sachen in Angriff genommen habe, die meist nur einen bestimmten Zweck erfüllen, gönn ich mir die Sache mit der Grafik. Das Auge ißt halt mitsmile

Ich werde deinen Vorschlag mal ausprobieren, werd aber wohl erst in den nächsten Tagen dazu kommen.
Auf diesen Beitrag antworten »
kurellajunior

Du kannst auch ganz hart in den Scrollpane reingehen und sogar die Scrollleisten überbasteln. Da wirst Dua ber wohl ein wenig in den Swingklassen lesen müssen. Allerdings gibt es bereits Frameworks, die frei konfigurierbare Scrollleisten enthalten.

Als Gegentip wenn nix funzt. Kreiere für den Scrollpane ein eigenes Layout, das optisch passt aber durch scrollen nicht zerstört wird (zB. horizontaler Verlauf Augenzwinkern )

Jan
Auf diesen Beitrag antworten »
David1979

Das große Problem beim Kreieren neuer Oberflächenelemente, wie zum Beispiel einen neuen Button, erfordert das Überschreibenen der paint-Methoden, was zum Teil recht aufwendig sein kann. Insbesondere, wenn es wirklich gezeichnet werden soll und kein Bild verwendet wird. Dann läßt es sich natürlich auf problemlos mit den Layoutmanagern verwenden. Aber da ist mir die Zeit doch ein bißchen zu schade fürsmile .

Apropo Framework: Hast zufällig einen Link parat?
Auf diesen Beitrag antworten »
kurellajunior

ööhm, nö. Jibbet zu viele Und ich habe sie selber nie verwendet, nur immer die Ergebnisse gesehen in Projekten. Da kann ich Dir leider nicht weiter helfen.
Auf diesen Beitrag antworten »
Tobias

Wie hast du es denn genau versucht?

Was passiert denn, wenn du sowohl in der JScrollPane als auch im JTextField "opaque" auf false setzt?
Auf diesen Beitrag antworten »
David1979

Das Attribut Opaque auf false setzen hat komischerweise keinen Einfluss auf die Durchlässigkeit des Textfeldes. Deshalb setze ich die Hintergrundfarbe des Textfeldes auf transparent.

code:
1:
2:
3:
scrollPane.setBorder(null);
textarea.setBorder(null);
textarea.setBackground(new Color(0,0,0,0));


Eine andere Variante war das Überschreiben der paint() Methode. Habs mittlerweile wieder verworfen, aber ich glaube so ähnlich wars:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
protected ImageIcon image = new ImageIcon("bild.gif");
protected JTextArea textarea = new JTextArea() {
    public void paint(Graphics g) {
        final int widht = image.getIconWidth();
        final int height = image.getIconHeight();
        
        g.drawImage(image.getImage(), 0, 0, width, height, image.getImageObserver());
    }
} 


Beides funktioniert beim Start der Applikation, aber sobald man Änderungen in der TextArea vornimmt, gibt es eine Art Spiegelbild. Man sieht wohl noch das Geschriebene, aber dahinter sieht man einen Bildausschnitt der Applikation selber, gerechnet ab der linken oberen Ecke des Fensters.
Auf diesen Beitrag antworten »
Gast9055622

Also ich habe eine Methode gefunden und nur um diesen Threat mit einer Antwort abzuschließen, da ich weiß dass dieser 5 Jahre alt ist, möchte ich diese für alle noch Antwortsuchenden weiterreichen:

Eine JScrollPane besteht aus mehreren Elementstücken die man alle Not-Opaque setzen muss. Ich glaube ich habe noch nicht alle gefunden aber die wichtigsten hier:

code:
1:
2:
3:
4:
5:
6:
7:
JScrollPane scrollPane = new JScrollPane();
scrollPane.setOpaque( false );

scrollPane.getViewport().setOpaque( false );

scrollPane.getHorizontalScrollBar().setOpaque( false );
scrollPane.getVerticalScrollBar().setOpaque( false );


wobei der Viewport der Hintergrund und somit das wichtigste transparent zu machende Objekt ist.

Gruß
N4pst3r
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »