Durchsichtiges JScroll und JTextPane

Brainiac

Bekanntes Mitglied
Ich habe ein Hintergrundbild. Auf diesem möchte ich nun Text in Form einer Liste erscheinen lassen. Da die Liste aber länger als das Bild werden kann bräuchte ich nun ein ScrollPane. Zudem ist das Bild größer als der Bereich in dem geschrieben werden soll. Was ist da der beste Ansatz? Durchsichtmachen eines JTextPane mit dazugehörigem ScollPane, das ich auf einem JPanel platziere? Das JPanel zeichnet dann auch das Hintegrundbild?
 

twseitex

Mitglied
Klasse Image anschauen, dort BufferedImage, denn das wird von vielen Komponenten unterstützt.
(FileReader arbeitet mehr lokal, also nicht mit Web-Adressen wie http://).
Image selbst gibt es ansonsten noch in anderen Varianten zum Einbauen.
Dann Klasse Graphic2D z.B. um Text zu erzeugen.
Dann eine Fensterelement aussuchen, in der Image z.B. als Graphic einbinden willst
oder als BufferedImage per Datei oder als Icon ....
Bei Applet unbedingt paint() und update() etc. anschauen.

Cu
 

Brainiac

Bekanntes Mitglied
Die rein graphische Lösung ist kein Problem, hab ich schon oft genug gemacht. Alles in der paintComponent() darstellen, wäre kein Problem. Nur wollte ich mir das diesmal sparen, daher die Idee mit dem JEditorPane im ScrollPane.

Ich habe nun auch folgende Klasse gefunden die mir da helfen soll:
AlphaContainer:
Java:
import java.awt.BorderLayout;
import java.awt.Graphics;
import javax.swing.JComponent;

/**
 *  A wrapper Container for holding components that use a background Color
 *  containing an alpha value with some transparency.
 *
 *  A Component that uses a transparent background should really have its
 *  opaque property set to false so that the area it occupies is first painted
 *  by its opaque ancestor (to make sure no painting artifacts exist). However,
 *  if the property is set to false, then most Swing components will not paint
 *  the background at all, so you lose the transparent background Color.
 *
 *  This components attempts to get around this problem by doing the
 *  background painting on behalf of its contained Component, using the
 *  background Color of the Component.
 */
public class AlphaContainer extends JComponent {
    private JComponent component;

    public AlphaContainer(JComponent component) {
        this.component = component;
        setLayout(new BorderLayout());
        setOpaque(false);
        component.setOpaque(false);
        add(component);
    }

    /**
     *  Paint the background using the background Color of the
     *  contained component
     */
    @Override
    public void paintComponent(Graphics g) {
        g.setColor(component.getBackground());
        g.fillRect(0, 0, getWidth(), getHeight());
    }
}

Mit einem JEditorPane funktioniert das auch. Aber sobald ich nen ScrollPane drumrumpacke geht es nicht mehr.
geht (durchsichtiges JEditorPane):
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JEditorPane;
import javax.swing.JPanel;

public class PatientPanel extends JPanel {
    private ImageIcon background;
    private JEditorPane patientPane;
    
    public PatientPanel() {
        background = new ImageIcon(getClass().getResource("images/background.jpg"));
        setPreferredSize(new Dimension(background.getIconWidth(), background.getIconHeight()));
       
        patientPane = new JEditorPane();
        patientPane.setBackground(new Color(0,0,0,0));
        patientPane.setOpaque(false);
        add(new AlphaContainer(patientPane));
        patientPane.setText("1\n2\n3\n");
    }

    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawImage(background.getImage(), 0, 0, this);
    }
}

kein durchsichtiges ScrollPane:
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JEditorPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class PatientPanel extends JPanel {
    private ImageIcon background;
    private JEditorPane patientPane;
    private JScrollPane myScrollPane;
    
    public PatientPanel() {
        background = new ImageIcon(getClass().getResource("images/background.jpg"));
        setPreferredSize(new Dimension(background.getIconWidth(), background.getIconHeight()));
  
        patientPane = new JEditorPane();
        patientPane.setBackground(new Color(0,0,0,0));
        patientPane.setOpaque(false);
        myScrollPane = new JScrollPane(new AlphaContainer(patientPane));
        myScrollPane.setBackground(new Color(0,0,0,0));
        myScrollPane.setOpaque(false);
        add(new AlphaContainer(myScrollPane));
        patientPane.setText("1\n2\n3\n");
    }

    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawImage(background.getImage(), 0, 0, this);
    }
}

Irgendwer ne Idee wo da mein Denkfehler ist?
 

Brainiac

Bekanntes Mitglied
So bleibt nur noch ein schmaler Rand übrig. Damit kann ich erst mal leben, hatte nicht bedacht den Viewport auch durchsichtig zu machen. Hier der ganze Code:

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JEditorPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SpringLayout;
import javax.swing.border.Border;

public class PatientPanel extends JPanel {
    private ImageIcon background;
    private JEditorPane patientPane;
    private JScrollPane myScrollPane;
    private AlphaContainer scrollAlphaContainer;
    
    public PatientPanel() {
        background = new ImageIcon(getClass().getResource("images/background.jpg"));
        setPreferredSize(new Dimension(background.getIconWidth(), background.getIconHeight()));
        SpringLayout layout = new SpringLayout();
        setLayout(layout);
       
        patientPane = new JEditorPane();
        patientPane.setBackground(new Color(0,0,0,0));
        patientPane.setOpaque(false);
        patientPane.setEditable(false);
        myScrollPane = new JScrollPane(new AlphaContainer(patientPane));
        myScrollPane.setPreferredSize(new Dimension(560,320));
        myScrollPane.setBackground(new Color(0,0,0,0));
        myScrollPane.setOpaque(false);
        myScrollPane.getViewport().setBackground(new Color(0,0,0,0));
        myScrollPane.getViewport().setOpaque(false);
        myScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollAlphaContainer = new AlphaContainer(myScrollPane);
        //Adjust constraints for the myScrollPane so it's at (5,5).
        layout.putConstraint(SpringLayout.WEST, scrollAlphaContainer, 30, SpringLayout.WEST, this);
        layout.putConstraint(SpringLayout.NORTH, scrollAlphaContainer, 100, SpringLayout.NORTH, this);
        add(scrollAlphaContainer);
    }

    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawImage(background.getImage(), 0, 0, this);
    }
}
 

Brainiac

Bekanntes Mitglied
Und mit einer Empty Border am JScrollPane, sieht mann dann auch nur noch den Scrollbalken bei Bedarf.

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JEditorPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SpringLayout;
import javax.swing.border.Border;
 
public class PatientPanel extends JPanel {
    private ImageIcon background;
    private JEditorPane patientPane;
    private JScrollPane myScrollPane;
    private AlphaContainer scrollAlphaContainer;
    
    public PatientPanel() {
        background = new ImageIcon(getClass().getResource("images/background.jpg"));
        setPreferredSize(new Dimension(background.getIconWidth(), background.getIconHeight()));
        SpringLayout layout = new SpringLayout();
        setLayout(layout);
       
        patientPane = new JEditorPane();
        patientPane.setBackground(new Color(0,0,0,0));
        patientPane.setOpaque(false);
        patientPane.setEditable(false);
        myScrollPane = new JScrollPane(new AlphaContainer(patientPane));
        myScrollPane.setPreferredSize(new Dimension(560,320));
        myScrollPane.setBackground(new Color(0,0,0,0));
        myScrollPane.setOpaque(false);
        myScrollPane.getViewport().setBackground(new Color(0,0,0,0));
        myScrollPane.getViewport().setOpaque(false);
        myScrollPane.setBorder(new BorderFactory.createEmptyBorder(0,0,0,0));
        myScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollAlphaContainer = new AlphaContainer(myScrollPane);
        //Adjust constraints for the myScrollPane so it's at (5,5).
        layout.putConstraint(SpringLayout.WEST, scrollAlphaContainer, 30, SpringLayout.WEST, this);
        layout.putConstraint(SpringLayout.NORTH, scrollAlphaContainer, 100, SpringLayout.NORTH, this);
        add(scrollAlphaContainer);
    }
 
    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawImage(background.getImage(), 0, 0, this);
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
BobbGott durchsichtiges JTextField mit Hintergrund AWT, Swing, JavaFX & SWT 12
M Durchsichtiges JTabbedPane? AWT, Swing, JavaFX & SWT 12
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
T JTextPane ignoriert HTML Zeilenumbruch <br> tag wegen eigenem HTMLEditorKit AWT, Swing, JavaFX & SWT 5
J Swing JTextpane aktuallisiert nicht den setText? AWT, Swing, JavaFX & SWT 9
M Strings im JTextPane vergleichen und mit StyledDocument formatieren AWT, Swing, JavaFX & SWT 3
X JTextPane automatischer Zeilenumbruch IM Wort AWT, Swing, JavaFX & SWT 2
R GUI Element in einer Methode aktualisieren (JTextPane) AWT, Swing, JavaFX & SWT 13
M Swing JTextPane, Bilder und Text-flow AWT, Swing, JavaFX & SWT 2
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
S Swing Warum funktioniert der automatische Zeilenumbruch mit arabischen Zeichen beim JTextPane nicht AWT, Swing, JavaFX & SWT 3
S Swing JtextPane sau langsam AWT, Swing, JavaFX & SWT 15
J Swing JTextPane mit JScrollPane auf JPanel scrollen nicht AWT, Swing, JavaFX & SWT 6
C JTextPane scrollt mit setText() immer nach oben AWT, Swing, JavaFX & SWT 2
S Swing Style Attribute aus JTextPane kopieren AWT, Swing, JavaFX & SWT 1
E JTextPane Focus AWT, Swing, JavaFX & SWT 1
TheJavaKid JTextPane: komplexe Formatierung (links) AWT, Swing, JavaFX & SWT 2
B Swing JTextPane - Einfärbungen auf "default" AWT, Swing, JavaFX & SWT 2
A Swing Einrücken mehrerer Zeilen per Tab in einem JTextPane/JTextArea AWT, Swing, JavaFX & SWT 3
T JtextPane Zeile aktualisieren AWT, Swing, JavaFX & SWT 3
T Hintergrundbild in JTextPane fixieren AWT, Swing, JavaFX & SWT 2
M Swing JTextPane frisst Anführungszeichen AWT, Swing, JavaFX & SWT 2
M Swing JTextPane + Scrollbar = Fragen AWT, Swing, JavaFX & SWT 15
H Swing JTextPane hat unästhetisches Scrollbar AWT, Swing, JavaFX & SWT 3
R Swing Renderproblem bei HTML in einer JTextPane AWT, Swing, JavaFX & SWT 12
N Swing JTextPane zur Anzeige von HTML AWT, Swing, JavaFX & SWT 2
E Swing jTextPane Text datei anzeigen AWT, Swing, JavaFX & SWT 7
xehpuk Swing Line-wrapping von JTextPane (in JScrollPane) AWT, Swing, JavaFX & SWT 3
Tobse Swing [JTextPane] Farbliche Hervorhebung AWT, Swing, JavaFX & SWT 9
X Swing JTextPane bei Größenänderung Formatierung behalten AWT, Swing, JavaFX & SWT 11
0 JTextPane copy/paste trotz editable(false) ? AWT, Swing, JavaFX & SWT 10
T Swing JTextPane Tastatureingabe abfangen AWT, Swing, JavaFX & SWT 4
xehpuk Swing JTextPane in JScrollPane wird nicht ordentlich neugezeichnet AWT, Swing, JavaFX & SWT 3
S Swing JTextPane append formatprobleme AWT, Swing, JavaFX & SWT 5
C JTextPane / JEditorPane ohne Keywords farbig machen AWT, Swing, JavaFX & SWT 4
C Zeilenumbruch von JTextPane wird nicht erkannt AWT, Swing, JavaFX & SWT 2
S JEditorPane oder JTextPane? AWT, Swing, JavaFX & SWT 2
P Aktuelle Zeile in JTextPane farblich hervorheben AWT, Swing, JavaFX & SWT 3
J JTextPane Background setzen AWT, Swing, JavaFX & SWT 6
T Text in JTextPane vertikal (!) zentrieren AWT, Swing, JavaFX & SWT 4
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
M JTextPane - bewegungsloses Hintergrundsbild (Duplikat) AWT, Swing, JavaFX & SWT 2
B JTextPane formatierten Inhalt speichern AWT, Swing, JavaFX & SWT 2
E JTextPane setText ignoriert \n AWT, Swing, JavaFX & SWT 6
P Swing Sichtbaren teil eines JTextPane herausbekommen (mit JScrollPane) AWT, Swing, JavaFX & SWT 2
C Swing JTextPane zeigt HTML-Text aus Variable nicht an :( AWT, Swing, JavaFX & SWT 3
T Zeichen zählen JTextPane AWT, Swing, JavaFX & SWT 4
K Swing JTextPane Formatierungen SyntaxHighlighting AWT, Swing, JavaFX & SWT 11
F Mit TAB JTextPane wechseln AWT, Swing, JavaFX & SWT 5
J JSlider auf JTextPane? AWT, Swing, JavaFX & SWT 2
S Buchstabenpositionen in JTextPane erhalten..? AWT, Swing, JavaFX & SWT 5
I JTextPane und Hyperlink (ohne JEditorPane) AWT, Swing, JavaFX & SWT 5
T Swing JTextArea, JTextPane, JEditorPane...Unterschied?! AWT, Swing, JavaFX & SWT 3
A Swing JTextPane sehr langsam AWT, Swing, JavaFX & SWT 6
P Drucken von Jtextpane mit Seitenangabe AWT, Swing, JavaFX & SWT 1
M Swing JTextPane mit JScrollPane soll aussehen wie JLabel AWT, Swing, JavaFX & SWT 3
A JTextPane: Text hinzufügen AWT, Swing, JavaFX & SWT 9
E Swing JTextPane Inhalt(Text und Bilder) als HTML text bekommen AWT, Swing, JavaFX & SWT 3
K Swing jTextPane zeilenumbruch AWT, Swing, JavaFX & SWT 2
Stillmatic JTextPane langsam? AWT, Swing, JavaFX & SWT 5
E Swing JTextPane linewrap AWT, Swing, JavaFX & SWT 4
M Swing [JTextPane] Cursor lässt sich nicht mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 3
T Swing xml in JTextPane mit EditorKit, StyledDocument & co. AWT, Swing, JavaFX & SWT 3
M Cursor setzen im JTextPane AWT, Swing, JavaFX & SWT 3
M Formatierungsfehler JTextPane WARUM ?? AWT, Swing, JavaFX & SWT 4
JavaKaffee Array auslesen in jTextPane? AWT, Swing, JavaFX & SWT 9
E JTextPane Bold Italic und Co AWT, Swing, JavaFX & SWT 6
M JTextPane Ende des Feldes AWT, Swing, JavaFX & SWT 4
D JTextPane - Text andersfarbig unterstreichen AWT, Swing, JavaFX & SWT 7
P Probleme mit JTextpane AWT, Swing, JavaFX & SWT 7
M Größe von JTextPane manuell bei Bedarf anpassen AWT, Swing, JavaFX & SWT 6
bugmenot JTextPane String stimmt nicht mit übergebenem String überein AWT, Swing, JavaFX & SWT 9
C JTextPane <br oder <p> statt \n AWT, Swing, JavaFX & SWT 2
C JTextPane HTML und eigene Tags AWT, Swing, JavaFX & SWT 10
G JTextPane durchsichtig? AWT, Swing, JavaFX & SWT 6
GilbertGrape Fehler bei HTML in JTextPane AWT, Swing, JavaFX & SWT 2
S JTextPane: Probem mit AlignmentAction AWT, Swing, JavaFX & SWT 3
J Problem mit JTextPane & JScrollPane (horizontal) AWT, Swing, JavaFX & SWT 3
B JTextPane und Image importieren in HTML String. AWT, Swing, JavaFX & SWT 2
J JTextPane mit genau 80 Zeichen breite definieren? AWT, Swing, JavaFX & SWT 3
J Html in JTextPane anzeigen? AWT, Swing, JavaFX & SWT 2
Steev JTextPane mit Textformatierung funktioniert nicht AWT, Swing, JavaFX & SWT 5
S JTextPane - markierten Text Formatieren AWT, Swing, JavaFX & SWT 11
P HTMLDocument in einem JTextPane. Anhängen von HTML-Code AWT, Swing, JavaFX & SWT 2
M Makierten Text in JTextPane zentrieren AWT, Swing, JavaFX & SWT 2
F JTextPane aktive Zeile AWT, Swing, JavaFX & SWT 2
G insert & JTextPane AWT, Swing, JavaFX & SWT 4
J JTextPane bekommt keinen Focus! AWT, Swing, JavaFX & SWT 3
S Farben eienr JTextPane dynamisch zuweisen AWT, Swing, JavaFX & SWT 2
R JTextPane scrollen vermeiden AWT, Swing, JavaFX & SWT 2
B Feste Breite einer JTextPane, die HTML anzeigt AWT, Swing, JavaFX & SWT 8
A JScrollPane in JTextPane AWT, Swing, JavaFX & SWT 2
B Swing Logging: Ein/Ausblenden eines scrollenden JTextPane AWT, Swing, JavaFX & SWT 2
F Java JTextPane AWT, Swing, JavaFX & SWT 13
Saxony JTextPane - letzte Zeile löschen AWT, Swing, JavaFX & SWT 4
TheJavaKid LineWrap & WrapStyleWord in JTextPane AWT, Swing, JavaFX & SWT 3
G Zeilenabstand bei HTML-Texten in JLabel/JTextPane AWT, Swing, JavaFX & SWT 7
O Swing Xml highlightning mit JTextPane und Regular expressions AWT, Swing, JavaFX & SWT 5
J JTextPane Alignment AWT, Swing, JavaFX & SWT 6
Y entfernten String einer JTextPane per DocumentListener AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben