svg Icon für Button (Batik Problem?)

sibianu

Mitglied
Hallo,
ich habe eine Klasse gefunden zum Laden von svg-Icons um die dann für einen Button zu benutzen. Bei mir funktioniert das wunderbar, auch wenn ich alles von einem Netz-Laufwerk starte. Auf alle anderen Rechner werden die Icons nicht richtig geladen. Ich sehe nur ein durchgerissenes Bild, so als wurden die Icons nicht richtig geladen. Ich sehe allerdings, dass meine Bilder doch teilweise vorhanden sind; man sieht irgendwie nur eine Schicht des svg-Bildes überlappt mit dem durchgerissene Bild. Ich habe mir extra einen LoaderListener eingebaut um zu schauen ob die Bilder complete geladen werden, das ist immer der Fall.
hier ist mein Code, ich bin für jede Idee dankbar woran das liegen kann, da ich mit Batik kaum was zu tun hatte bis jetzt.
Java:
public class SvgBatikResizableIcon extends JSVGComponent implements ResizableIcon {
  
  private AffineTransform originalTransform;

  public boolean isLoaded;

  private Dimension initialDim;

  public SvgBatikResizableIcon(final URL location, final Dimension initialDim) {
    super(null, false, false);
    this.initialDim = initialDim;
    this.isLoaded = false;
    this.addGVTTreeBuilderListener(new GVTTreeBuilderAdapter() {
      public void gvtBuildCompleted(GVTTreeBuilderEvent e) {
        originalTransform = getRenderingTransform();
        Dimension2D fileContentsDim = getSVGDocumentSize();
        double coef = initialDim.getWidth()
        / fileContentsDim.getWidth();
        AffineTransform at = AffineTransform.getScaleInstance(coef,
            coef);
        setSize(initialDim);
        if (at != null) {
          at.concatenate(originalTransform);
          setRenderingTransform(at, true);
          isLoaded = true;
          if (getParent() != null) {
            getParent().doLayout();
            getParent().repaint();
          }
        }
      }
    });
    this.addSVGDocumentLoaderListener(new SVGDocumentLoaderAdapter() {
      public void documentLoadingStarted(SVGDocumentLoaderEvent e) {
        if (e.getSVGDocument() != null)
          System.out.println(e.getSVGDocument().getURL() + " loading started");
    }
    public void documentLoadingCompleted(SVGDocumentLoaderEvent e) {
      if (e.getSVGDocument() != null)
        System.out.println(e.getSVGDocument().getURL() + " loading complete");
    }
});

    this.loadSVGDocument(location.toString());
    this.setOpaque(false);
    // Apparently the JGVTComponent doesn't respect the
    // opacity in paintComponent.
    this.setBackground(new Color(0x0, true));
  }

  public void revertToOriginalDimension() {
    this.setDimension(this.initialDim);
  }

  public void setDimension(Dimension dim) {
    if (!isLoaded)
      return;
    setSize(dim);
    Dimension2D fileContentsDim = getSVGDocumentSize();
    double coef = dim.getWidth() / fileContentsDim.getWidth();
    AffineTransform at = AffineTransform.getScaleInstance(coef, coef);
    if (at != null) {
      at.concatenate(originalTransform);
      setRenderingTransform(at);
    }
  }

  public void setHeight(int height) {
    this.setDimension(new Dimension(height, height));
  }

  public void setWidth(int width) {
    this.setDimension(new Dimension(width, width));
  }

  public void paintIcon(Component c, Graphics g, int x, int y) {
    if (!isLoaded)
      return;
    Graphics2D graphics = (Graphics2D) g.create();
    //graphics.setTransform(AffineTransform.getTranslateInstance(-x, -y));
    this.paintComponent(graphics);
    graphics.dispose();
  }

  @Override
  public void paint(Graphics g) {
    super.paint(g);
  }

  public int getIconHeight() {
    if (!isLoaded)
      return this.initialDim.height;
    return this.getSize().height;
  }

  public int getIconWidth() {
    if (!isLoaded)
      return this.initialDim.width;
    return this.getSize().width;
  }

}

uns do würde ich das ganze benutzen dann:

Java:
   File file3 = new File("N://...//Tuer2.svg");
  SvgBatikResizableIcon icon3 = new SvgBatikResizableIcon(file3.toURI().toURL(), new Dimension(60, 60));

  ButExit.setMaximumSize(new Dimension(64, 64));
  ButExit.setMinimumSize(new Dimension(64, 64));
  ButExit.setPreferredSize(new Dimension(64, 64));
  ButExit.setIcon(icon3);

Danke im voraus,
sibianu
 
Zuletzt bearbeitet:
E

el_wuha

Gast
Hi sibinau,

wie ich sehe nutzt du die Batik-Klasse. Aktuell arbeite ich an einem CGM & SVG-Editor, bei welchem ich die gleichen Probleme hatte.

Kurz umrissen: Eingebettete Bilder in SVG-Grafiken wurden auf einigen Computern dargestellt, auf anderen wiederum nicht. Teilweise glich es auch eher einem Glücksspiel ob es überhaupt dargestellt wurde ;-)

Meine bisher erfolgreichen Lösungen:

1. Fang den DOM ab und lies das image-tag aus. Sind die Breiten und Längenattribute größer 1000px kommt es zu den besagten Fehlern. Nachdem ich eine Routine einbaute, die Bilder größer 1000px verkleinert und neu-einbettet kommt es zu keinerlei Ausfällen mehr.

2. Sofern du mit Eclipse arbeitest solltest du das Projekt vor deinen Tests kompilieren. Batik braucht zeitweise viel Speicher und jagt die Maschine gut hoch. Mit den richtigen Startparametern lässt sich hier ebenfalls ne Menge rausholen.

Fazit:
Dank dieser zwei kleinen Workarounds durchliefen bisher knapp 600 Dateien, mit meist eingebetteten TIFF-Dateien weit über 2000px, ohne Probleme :)

LG
 

sibianu

Mitglied
Ok, etwas spät aber lieber später als nie. :)

Danke für die Antwort, das Problem lag aber bei mir woanders. Die erstellten svg-Dateien hatten bei mir noch einen Link auf die echte Datei (z.B. gif). Lokal wurden diese Dateien natürlich gefunden, auf andere Rechner bekam ich halt exceptions weil die Dateien nicht gefunden werden und dadurch wurden die Bilder nicht vollständig geladen. ;) Das Problem war gelöst, nachdem ich die originalen Bilder in die svg eingebettet habe.
Mein Fehler, hatte bis dahin nichts mit Erstellen von SVGs zu tun. :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Windowbuilder - Icon für Button einbinden AWT, Swing, JavaFX & SWT 2
N Icon für Button wird nicht gefunden AWT, Swing, JavaFX & SWT 11
Burny91 Swing Swatches vom JColorChooser als Icon für JButton benutzen AWT, Swing, JavaFX & SWT 4
E Icon für Fenster AWT, Swing, JavaFX & SWT 5
B SWT Eigenes Icon für CheckboxTreeViewer AWT, Swing, JavaFX & SWT 3
P [JTree] Icon für Nodes und Leafs ändern bzw. löschen AWT, Swing, JavaFX & SWT 2
C Was is am besten für Icon? AWT, Swing, JavaFX & SWT 2
loadbrain Icon für JFrame mit Netbeans AWT, Swing, JavaFX & SWT 3
$ Layoutabhängige größe von JLabel für Icon abfragen AWT, Swing, JavaFX & SWT 2
G für showInputDialog kein eigenes Icon auswählen AWT, Swing, JavaFX & SWT 6
B icon für eine JList zelle setzen AWT, Swing, JavaFX & SWT 14
G Ikonli in Fat-Jar mit mehreren Icon-Packs einbinden AWT, Swing, JavaFX & SWT 5
I AWT java.awt.FileDialog - "coffee cup"-Icon lässt sich nicht ersetzen AWT, Swing, JavaFX & SWT 14
P Swing Icon einfügen wirft eine Fehlermeldung AWT, Swing, JavaFX & SWT 3
J JButton Icon hinzufügen AWT, Swing, JavaFX & SWT 5
U Swing JButton mit Icon AWT, Swing, JavaFX & SWT 7
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
krgewb Swing Icon von Button AWT, Swing, JavaFX & SWT 12
Shallty JavaFX MenuItem (Info) Icon ändern AWT, Swing, JavaFX & SWT 7
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
U AWT Smoother Icon AWT, Swing, JavaFX & SWT 2
D Kein Icon beim JTabbedPane AWT, Swing, JavaFX & SWT 1
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
D Icon in Menuitem einfügen AWT, Swing, JavaFX & SWT 8
C Icon in der Spaltenüberschrift AWT, Swing, JavaFX & SWT 1
C SWT Treeview mit Bilder im Label verändert Expanded Icon AWT, Swing, JavaFX & SWT 1
Tom299 JavaFX TreeView Expanded-Icon ändern AWT, Swing, JavaFX & SWT 0
E Swing Error icon in der TextArea AWT, Swing, JavaFX & SWT 1
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
M label mit icon verschieben. AWT, Swing, JavaFX & SWT 1
M JavaFX wie kann mann sein frame mit einem Icon fersehen? AWT, Swing, JavaFX & SWT 2
C JavaFX Application -Icon wird falsch dargestellt AWT, Swing, JavaFX & SWT 7
J JavaFX TextArea dynamisch Icon im Background anzeigen AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
D JavaFX - MenuItem mit Icon AWT, Swing, JavaFX & SWT 1
T JFrame Icon unter Linux/Ubuntu AWT, Swing, JavaFX & SWT 11
A Swing JColorChooser's Icon will nicht getauscht werden. AWT, Swing, JavaFX & SWT 10
B JAVAFX icon in ComboBox einfügen AWT, Swing, JavaFX & SWT 5
H Javafx - Menuitem - Icon AWT, Swing, JavaFX & SWT 4
J JComboBox Dropdown Icon AWT, Swing, JavaFX & SWT 2
vodkaz JButtonz Icon&Background AWT, Swing, JavaFX & SWT 3
B Icon AWT, Swing, JavaFX & SWT 5
E Swing JFrame Icon AWT, Swing, JavaFX & SWT 3
F icon aus exe auslesen mithilfe des JFilechooser ? AWT, Swing, JavaFX & SWT 4
F DefaultTreeCellEditor - Fragen zur Groesse und zum Icon beim Editieren AWT, Swing, JavaFX & SWT 4
H Label mit Icon positionieren AWT, Swing, JavaFX & SWT 14
H Image Icon ersetzen AWT, Swing, JavaFX & SWT 8
J Icon vor Button AWT, Swing, JavaFX & SWT 7
M Swing JButton-Konstruktor Icon-Parameter (Verständnisfrage) AWT, Swing, JavaFX & SWT 7
TheWhiteShadow Swing Problem mit Icon-Menü-Leiste AWT, Swing, JavaFX & SWT 5
S Würfelanimation icon updaten AWT, Swing, JavaFX & SWT 8
S JButton -> Text über Icon AWT, Swing, JavaFX & SWT 4
M Swing DoubleBuffer mit Icon AWT, Swing, JavaFX & SWT 3
TiME-SPLiNTER JLabel mit Icon & JFrame Resize AWT, Swing, JavaFX & SWT 5
V Panel/Icon aktualisieren AWT, Swing, JavaFX & SWT 10
S 2D-Grafik Icon in Image (System Icons) AWT, Swing, JavaFX & SWT 2
X Icon in JTable abbilden AWT, Swing, JavaFX & SWT 10
M Icon wird bei externen Jar nicht angezeigt AWT, Swing, JavaFX & SWT 2
L toggel icon in jtable AWT, Swing, JavaFX & SWT 3
kodela Swing Icon in der Titelleiste "festnageln" AWT, Swing, JavaFX & SWT 6
G JLabel Icon Pfeilform AWT, Swing, JavaFX & SWT 14
S JCheckBoxMenuItem - Haekchen verschwindet bei Icon AWT, Swing, JavaFX & SWT 3
V Ein Image als Button (nicht mit JButton(Icon)) AWT, Swing, JavaFX & SWT 5
algorismi JInternalframe Icon AWT, Swing, JavaFX & SWT 14
M JCheckBox Icon anpassen AWT, Swing, JavaFX & SWT 2
M Prozess-Icon im Prozessmanager AWT, Swing, JavaFX & SWT 8
W Swing Button mit Icon AWT, Swing, JavaFX & SWT 3
C Swing JToggleButton und Icon AWT, Swing, JavaFX & SWT 2
S JTree - Knoten mit animiertem GIF/Icon AWT, Swing, JavaFX & SWT 5
S vector Icon AWT, Swing, JavaFX & SWT 3
C LayoutManager Icon Einfügen? AWT, Swing, JavaFX & SWT 6
K LookAndFeel JTabbedPane mit Icon und CloseButton AWT, Swing, JavaFX & SWT 2
badfish Swing ImageIcon auf JLabel, Fenster Maximieren verbieten und Icon oben links austauschen? AWT, Swing, JavaFX & SWT 5
F Problem beim Positionieren von Icon und Text in Button AWT, Swing, JavaFX & SWT 2
R JTable mit Column die Icon und Integer enthält? AWT, Swing, JavaFX & SWT 3
T Icon von Frame ändern - Applet AWT, Swing, JavaFX & SWT 2
J Icon einer JCheckBox AWT, Swing, JavaFX & SWT 6
D Swing Anwenungs Icon AWT, Swing, JavaFX & SWT 8
A Swing JTable Icon nur in einer Zelle AWT, Swing, JavaFX & SWT 2
R JTable Header - will links kleines icon hinzufuegen..? AWT, Swing, JavaFX & SWT 6
J Swing JToolBar Button mit Icon AWT, Swing, JavaFX & SWT 4
V [Swing] Overlay Icon AWT, Swing, JavaFX & SWT 5
K Schachbrett / Icon / JButton AWT, Swing, JavaFX & SWT 7
T Abbrechen-Icon entfernen AWT, Swing, JavaFX & SWT 4
S Buttons mit großen Icon AWT, Swing, JavaFX & SWT 7
klattiator Icon und Button zum Schließen in einem Tab AWT, Swing, JavaFX & SWT 3
G Sehr kleine JButtons mit Icon oder Beschriftung AWT, Swing, JavaFX & SWT 2
G Icon ans Ende einer JToolbar AWT, Swing, JavaFX & SWT 7
D Abfrageproblem bei JMenu mit Icon AWT, Swing, JavaFX & SWT 2
K Icon auf JButton mit Wechsel der Farbe AWT, Swing, JavaFX & SWT 2
G Gap zwischen JButton-Rand und JButton-Icon verändern AWT, Swing, JavaFX & SWT 2
G JFrame Icon ändern AWT, Swing, JavaFX & SWT 5
G Icon und Text in JTable darstellen AWT, Swing, JavaFX & SWT 3
S Eclipse Icon Set AWT, Swing, JavaFX & SWT 6
G Icon in JTable AWT, Swing, JavaFX & SWT 9
S Jtree-Icon per Klick auf JBUTTON ändern AWT, Swing, JavaFX & SWT 3
A Icon,zentriert,Farbiger Text alles in einer Tabelle/Spalte ? AWT, Swing, JavaFX & SWT 4
L icon auf Label AWT, Swing, JavaFX & SWT 4
K Icon und Text auf JButton anordnen AWT, Swing, JavaFX & SWT 2
D Icon in MenuItem AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben