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.
uns do würde ich das ganze benutzen dann:
Danke im voraus,
sibianu
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: