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

Informatiker Board » Themengebiete » Sonstige Fragen » Java Swing - Transparenz bei JScrollPane » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
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
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.
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?
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.
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?
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
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.
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
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
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
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen.