JTextPane und Image importieren in HTML String.

Status
Nicht offen für weitere Antworten.

barockreiter

Neues Mitglied
Hallo, vieleicht kann mir jemand einen Tip geben.

Folgendes Ausgangsproblem: Ich habe einen HTML - Text, den ich mit JTextPane "readonly" darstellen möchte.
Das klappt auch soweit ganz gut, die Formatierung ist auch okay. Nun aber das Problem mit dem Tag <img src=xy.jpg">!
Das Bild befindet sich in einer MySQL - Datenbank. Nun möchte ich das Bild in den HTML Code integrieren und nicht
von der Platte lesen, wie es der Browser normalerweise tut.
Das Auslesen der Bilddatei und darstellen als IconImage funktionert auch. Nur wie bekomme ich das Bild an die Stelle wo
es gebraucht wird, das ist mein Problem.?

Gibt es einen Ansatz?

z.B.:
Code:
jTextPane jTextAkte = new jTextPane();

String s = "<html><body><table><tr><td>Hier steht die Bildbeschreibung</td><td><img src=xy.jpg></td></tr></table></body></html>";

this.jTextAkte.setText(s);
this.jTextAkte.setEditable(false);

Mit freundlichen Grüssen
Roland
 

anfänger15

Bekanntes Mitglied
Wenn ich dich richtig verstanden habe möchtest du ein Bild das sich normalerweiße in einer Datei befindent (bei dir aber in einer Datenbank) auslesen und dann darstellen.

Ich weiß nicht ob es funktioniert aber du könntest mit ImageIO einen Stream einlesen(aus der DB) und das Bild mit einem BufferedImage darstellen.
 

barockreiter

Neues Mitglied
anfänger15 hat gesagt.:
Wenn ich dich richtig verstanden habe möchtest du ein Bild das sich normalerweiße in einer Datei befindent (bei dir aber in einer Datenbank) auslesen und dann darstellen.

Ich weiß nicht ob es funktioniert aber du könntest mit ImageIO einen Stream einlesen(aus der DB) und das Bild mit einem BufferedImage darstellen.

Hi,
ja genau, das Bild befindet sich in der Datenbank. Das Problem ist nicht das Einlesen und darstellen des Bildes als solches; mein Problem ist das Bild zusammen mit dem HTML String darzustellen und zwar Anstelle von <img src=xy.jpg>.

Schöne Grüsse
Roland

Zur genaueren Verdeutlichung habe ich auf die schnelle ein kleines Java-Programm erstellt. Ich selbst arbeite mit NetBeans 6.1, ausgetestet und es funktioniert einwandfrei, bis auf mein Problem :bahnhof:

Die Datenbankdefinition (MySQL):
Code:
DROP DATABASE IF EXISTS sqlImage;
CREATE DATABASE IF NOT EXISTS sqlImage;
USE sqlImage;

CREATE TABLE sqlImage (
 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 name VARCHAR(64) DEFAULT '',
 bild BLOB
);

Und nun der Java-Code:
Code:
package sqlimage;
import java.awt.*;
import java.sql.*;
import java.io.*;
import javax.swing.*;

/**
 *
 * @author  Roland Naake
 */
public class SqlImage extends javax.swing.JDialog {
    private Connection connection = null;
    
    /** Creates new form SqlImage */
    public SqlImage(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/sqlImage","root","geheim");
        } catch (Exception ex) {
            System.out.println(ex.toString());
            System.exit(1);
        }
    }

    /** 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">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLName = new javax.swing.JLabel();
        jTFName = new javax.swing.JTextField();
        jBEinfuegen = new javax.swing.JButton();
        jBSuchen = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextausgabe = new javax.swing.JTextPane();
        jLBild = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jLName.setText("Name");

        jBEinfuegen.setText("einfÃŒgen");
        jBEinfuegen.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBEinfuegenActionPerformed(evt);
            }
        });

        jBSuchen.setText("suchen");
        jBSuchen.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBSuchenActionPerformed(evt);
            }
        });

        jScrollPane1.setViewportView(jTextausgabe);

        jLBild.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLBild.setText("<html>Kein [b]Bild[/b]
verfÃŒgbar!</html>");
        jLBild.setBorder(javax.swing.BorderFactory.createTitledBorder(""));

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(layout.createSequentialGroup()
                                .add(15, 15, 15)
                                .add(jLName, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 43, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 42, Short.MAX_VALUE)
                                .add(jTFName, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 130, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                            .add(layout.createSequentialGroup()
                                .add(jLBild, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 101, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(50, 50, 50)
                                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                                    .add(jBSuchen, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 79, Short.MAX_VALUE)
                                    .add(jBEinfuegen, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 79, Short.MAX_VALUE))))
                        .add(171, 171, 171))
                    .add(layout.createSequentialGroup()
                        .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 391, Short.MAX_VALUE)
                        .addContainerGap())))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(jTFName, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jLName))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(layout.createSequentialGroup()
                        .add(jBEinfuegen)
                        .add(18, 18, 18)
                        .add(jBSuchen))
                    .add(jLBild, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 113, Short.MAX_VALUE))
                .add(18, 18, 18)
                .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 208, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void jBEinfuegenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBEinfuegenActionPerformed
// TODO add your handling code here:
    if (jTFName.getText().length() > 0) {
        JFileChooser ch = new JFileChooser();
        ch.setMultiSelectionEnabled(false);
        int r = ch.showOpenDialog(this);
        
        if (r == JFileChooser.CANCEL_OPTION) {
            JOptionPane.showMessageDialog(this, 
                "Auswahl abgebrochen!\n");
            return;
        }
        
        if (r == JFileChooser.APPROVE_OPTION) {
            
            File f = null;
            FileInputStream fis = null;
            PreparedStatement ps = null;
            String query = "INSERT INTO sqlImage (name,bild) VALUE ( ?, ? )";
            
            try {
                f = ch.getSelectedFile();
                fis = new FileInputStream(f);
                
                ps = connection.prepareStatement(query);
                ps.setString(1, jTFName.getText());
                ps.setBinaryStream(2, fis, (int)f.length());
                ps.executeUpdate();
                
                JOptionPane.showMessageDialog(this, 
                    "Datensatz eingefÃŒgt!\n");

                fis = new FileInputStream(f);
                Image obild = javax.imageio.ImageIO.read(fis);
                Image htmlBild = obild.getScaledInstance(75,100, Image.SCALE_SMOOTH);
                jLBild.setIcon(new ImageIcon(htmlBild));
                jLBild.setText("");
                
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(this, ex.toString());
            } finally {
                try { if (ps != null) ps.close(); } catch (Exception ex) {}
                try { if (fis != null) fis.close(); } catch (Exception ex) {}
            }
        }
        
    } else {
        JOptionPane.showMessageDialog(this, 
            "Name nicht angegeben!\n");
    }
}//GEN-LAST:event_jBEinfuegenActionPerformed

private void jBSuchenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBSuchenActionPerformed
// TODO add your handling code here:
    PreparedStatement st = null;
    ResultSet rs = null;
    
    String query = "SELECT name,bild FROM sqlImage WHERE name = ?";
    
    if (jTFName.getText().length() > 0) {
        String htmlName = "";
        try {
            st = connection.prepareStatement(query);
            st.setString(1, jTFName.getText());
            rs = st.executeQuery();
            rs.next();
            
            htmlName = rs.getString("name");
            
            Blob bl = rs.getBlob("bild");
            BufferedInputStream bis = new BufferedInputStream(bl.getBinaryStream());
            Image obild = javax.imageio.ImageIO.read(bis);
            Image htmlBild = obild.getScaledInstance(75,100, Image.SCALE_SMOOTH);
            
            jLBild.setIcon(new ImageIcon(htmlBild));
            jLBild.setText("");
            
            setTextausgabe(htmlName, htmlBild);
            
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(this, ex.toString());
        } finally {
            try { if (rs != null) rs.close(); } catch (Exception ex) {}
            try { if (st != null) st.close(); } catch (Exception ex) {}
        }
    } else {
        JOptionPane.showMessageDialog(this, 
            "Kein Eintrag im Feld Name!\n");
        return;
    }
    
}//GEN-LAST:event_jBSuchenActionPerformed

private void setTextausgabe(String name, Image bild) {
    String html = "<html><table border=0>" +
        "<tr><td>[b]Name:[/b] " + name + "
</td>" +
        "<td><img src=bild></td></tr>" +
        "</table></html>";
    
    jTextausgabe.setContentType("text/html");
    jTextausgabe.setText(html);
    jTextausgabe.setEditable(false);
}

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                SqlImage dialog = new SqlImage(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jBEinfuegen;
    private javax.swing.JButton jBSuchen;
    private javax.swing.JLabel jLBild;
    private javax.swing.JLabel jLName;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextField jTFName;
    private javax.swing.JTextPane jTextausgabe;
    // End of variables declaration//GEN-END:variables

}

Grüsse vom Bodensee
Roland
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
B Durchsichtiges JScroll und JTextPane 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
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
B Ein großes JTextPane komplett drucken AWT, Swing, JavaFX & SWT 2
7 Latex/MathML Code in JTextPane AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben