我想生成一个带有svg图标内容的图标。例如,带有面(svg文件)的黄色圆圈。目前我有这个代码。
圆圈位于正确的位置,但是整个JPanel上都绘制了svg,如果我调整框架的大小,则会一直添加svg。
svg加载了白色背景并且尺寸错误。
有没有办法让svg的背景透明并将svg转换为圆形大小?
作为信息:svg文件有一个透明的背景(见adobe illustrator)但在Java中加载了白色...
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import org.apache.batik.swing.JSVGCanvas;
public class IconTest extends JPanel{
public IconTest(){
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
super.paintComponent(g2d);
this.setBackground(new Color(255,255,255));
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// create icon body
Ellipse2D iconBody = new Ellipse2D.Double(0, 0, 100, 100);
g2d.setPaint(Color.YELLOW);
g2d.draw(iconBody);
g2d.fill(iconBody);
// icon content
JSVGCanvas svg = new JSVGCanvas();
svg.setURI("file:/C:/Users/Linda/Desktop/smile.svg");
add(svg);
}
public static void main(String[] args) throws Exception{
JFrame frame = new JFrame("IconTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600,600);
frame.setVisible(true);
IconTest i = new IconTest();
frame.add(i);
}
}
编辑:
bevor转换窗口大小
转换窗口大小后。 SVG一直是白色背景添加的,它的大小取决于我对窗口的转换速度......
编辑:您可以下载svg文件here
答案 0 :(得分:2)
svg加载了白色背景,尺寸错误。
我不是百分百肯定因为我无法测试atm,但是您要添加白色背景:
this.setBackground(new Color(255,255,255)); //Remove this line
所以,背景是白色的,这就是为什么你会看到白色背景的svg。或者将其改为另一种颜色,看看会发生什么。
您对in the wrong size
的意思是什么?
圆圈位于正确的位置,但是整个JPanel上都绘制了svg,如果我调整框架的大小,则会一直添加svg。
嗯,默认情况下,JFrame
有一个BorderLayout
,当您添加内容时,默认位置没有指定BorderLayout
所需的BorderLayout.CENTER
和{39}} ;不要在任何地方添加任何其他内容,因此它使用JPanel
的100%大小。也许您想尝试使用其他Layout Manager,例如BoxLayout或FlowLayout或GridLayout。
我在您的代码中看到的另一件事是您在显示IconTest
之后添加了JFrame
面板,相反,您应该像这样更改它,一旦您&#39 ;为您的JFrame
选择了另一种布局。
JFrame frame = new JFrame("IconTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
IconTest i = new IconTest();
frame.add(i);
frame.setSize(600,600);
frame.setVisible(true);