SVGSalamander:我如何调整单个SvgIcon的大小?

时间:2014-05-09 06:58:20

标签: java svg image-size

使用SvgSalamander,我正在尝试从某个svg构建一个Chess Canvas。但是我无法想象如何调整单个SvgIcon元素的大小(与使用整个客户区的this case不同。此外,我真的想在没有AffineTransform类的情况下完成它计算)。 我试过使用SvgIcon#setPreferredSize(java.awt.Dimension)......但它没有改变任何东西。

我也看过this:还注意到我下载的图片没有视图元素:但是添加一个viewbox和preserveAspectRatio属性并没有改变任

我已经能够加载SvgIcon:我只是错过了一种调整大小的方法。 (我之所以想要SVG格式:能够调整大小"没有丢失")。

2 个答案:

答案 0 :(得分:1)

setPreferredSize与setScaleToFit结合使用效果很好。至少它对我有用。

    import java.awt.*;
    import java.net.*;
    import java.io.*;

    import javax.swing.*;
    import com.kitfox.svg.*;
    import com.kitfox.svg.app.beans.*;
    class IconPanel extends JPanel { 

        final SVGIcon icon;
        public IconPanel(String name, int scalex, int scaley) { 
            icon = new SVGIcon();
            icon.setSvgURI(new SVGUniverse().loadSVG(getClass().getResource(name)));
        icon.setPreferredSize(new Dimension(scalex, scaley));
        icon.setScaleToFit(true);
        icon.setAntiAlias(true);} 
    public void paintComponent(Graphics g) { 

    icon.paintIcon(this, g, 0, 0); 
    icon.isScaleToFit();}}

public static void main(String[] args){
    JFrame frame=new JFrame();
    JPanel p=new JPanel();
    frame.setSize(800, 600);
    frame.setLayout(new BorderLayout());
    IconPanel icon=new IconPanel("cell.svg",1000,1000);
    frame.add(icon,BorderLayout.CENTER);
    frame.setVisible(false);
    frame.add(p,BorderLayout.PAGE_START);
    JButton button=new JButton();
    p.add(button);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.show();

}
    }

答案 1 :(得分:0)

为控件编写组件侦听器。

组件侦听器必须具有SVGIcon引用,并且必须在组件大小更改时设置图标大小。