使用SvgSalamander,我正在尝试从某个svg构建一个Chess Canvas。但是我无法想象如何调整单个SvgIcon元素的大小(与使用整个客户区的this case不同。此外,我真的想在没有AffineTransform类的情况下完成它计算)。 我试过使用SvgIcon#setPreferredSize(java.awt.Dimension)......但它没有改变任何东西。
我也看过this:还注意到我下载的图片没有视图元素:但是添加一个viewbox和preserveAspectRatio属性并没有改变任
我已经能够加载SvgIcon:我只是错过了一种调整大小的方法。 (我之所以想要SVG格式:能够调整大小"没有丢失")。
答案 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引用,并且必须在组件大小更改时设置图标大小。