Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Sonstige Fragen » Java Swing - Transparenz bei JScrollPane » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Java Swing - Transparenz bei JScrollPane
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
David1979
Mitglied


Dabei seit: 26.09.2006
Beiträge: 27

Java Swing - Transparenz bei JScrollPane Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
26.09.2006 12:01 David1979 ist offline E-Mail an David1979 senden Beiträge von David1979 suchen Nehmen Sie David1979 in Ihre Freundesliste auf
kurellajunior kurellajunior ist männlich
Support


Dabei seit: 07.09.2006
Beiträge: 42
Herkunft: Von hier

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
26.09.2006 12:22 kurellajunior ist offline E-Mail an kurellajunior senden Beiträge von kurellajunior suchen Nehmen Sie kurellajunior in Ihre Freundesliste auf Fügen Sie kurellajunior in Ihre Kontaktliste ein
David1979
Mitglied


Dabei seit: 26.09.2006
Beiträge: 27

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
26.09.2006 12:34 David1979 ist offline E-Mail an David1979 senden Beiträge von David1979 suchen Nehmen Sie David1979 in Ihre Freundesliste auf
kurellajunior kurellajunior ist männlich
Support


Dabei seit: 07.09.2006
Beiträge: 42
Herkunft: Von hier

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
26.09.2006 12:39 kurellajunior ist offline E-Mail an kurellajunior senden Beiträge von kurellajunior suchen Nehmen Sie kurellajunior in Ihre Freundesliste auf Fügen Sie kurellajunior in Ihre Kontaktliste ein
David1979
Mitglied


Dabei seit: 26.09.2006
Beiträge: 27

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.
27.09.2006 12:13 David1979 ist offline E-Mail an David1979 senden Beiträge von David1979 suchen Nehmen Sie David1979 in Ihre Freundesliste auf
kurellajunior kurellajunior ist männlich
Support


Dabei seit: 07.09.2006
Beiträge: 42
Herkunft: Von hier

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
27.09.2006 12:59 kurellajunior ist offline E-Mail an kurellajunior senden Beiträge von kurellajunior suchen Nehmen Sie kurellajunior in Ihre Freundesliste auf Fügen Sie kurellajunior in Ihre Kontaktliste ein
David1979
Mitglied


Dabei seit: 26.09.2006
Beiträge: 27

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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?
27.09.2006 13:39 David1979 ist offline E-Mail an David1979 senden Beiträge von David1979 suchen Nehmen Sie David1979 in Ihre Freundesliste auf
kurellajunior kurellajunior ist männlich
Support


Dabei seit: 07.09.2006
Beiträge: 42
Herkunft: Von hier

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

öö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.
27.09.2006 14:15 kurellajunior ist offline E-Mail an kurellajunior senden Beiträge von kurellajunior suchen Nehmen Sie kurellajunior in Ihre Freundesliste auf Fügen Sie kurellajunior in Ihre Kontaktliste ein
Tobias
Routinier


Dabei seit: 18.09.2006
Beiträge: 324

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wie hast du es denn genau versucht?

Was passiert denn, wenn du sowohl in der JScrollPane als auch im JTextField "opaque" auf false setzt?
27.09.2006 16:35 Tobias ist offline E-Mail an Tobias senden Beiträge von Tobias suchen Nehmen Sie Tobias in Ihre Freundesliste auf
David1979
Mitglied


Dabei seit: 26.09.2006
Beiträge: 27

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von David1979: 27.09.2006 21:36.

27.09.2006 21:33 David1979 ist offline E-Mail an David1979 senden Beiträge von David1979 suchen Nehmen Sie David1979 in Ihre Freundesliste auf
Gast9055622
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
15.12.2011 08:32
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Sonstige Fragen » Java Swing - Transparenz bei JScrollPane