자, Java 프로그램을 사용하여 FlowLayout에 SVG 인 타일을 표시합니다. ScrabbleRack 클래스이며 JPanel을 확장 한 다음 JSVGCanvas 타일을이 패널에 추가하여이 작업을 수행합니다.Java에서 SVG가 올바르게 표시되지 않습니다.
나중에 프레임을 만들고 패널을 추가했습니다. (포장하여 표시). 나타나면 패널이 제대로 표시되지 않습니다. 단지 첫 번째 타일을 표시 한 다음 나머지 타일을 표시해야하는 공간에 흰색 영역이 표시됩니다.
그러나 프레임의 크기를 임의로 조정하면 이미지가 올바르게 렌더링됩니다.
public class ScrabbleRackGUI extends JPanel{
ScrabbleRack rack=new ScrabbleRack();
JSVGCanvas rackContentsImages[]=new JSVGCanvas[8];
public ScrabbleRackGUI() {
setLayout(new FlowLayout());
createComponents();
}
public void createComponents() {
//INITIALISE SOURCE IMAGES
initImages();
for (int i=0;i<rackContentsImages.length;i++){
this.add(rackContentsImages[i]);
}
}
private void initImages(){
File tempImages[]=new File[8];
for(int i=0;i<8;i++){
tempImages[i]= new File("./src/res/rackBackground.svg");
rackContentsImages[i]=new JSVGCanvas();
try {
rackContentsImages[i].setURI(tempImages[i].toURL().toString());
} catch (MalformedURLException ex) {
Logger.getLogger(ScrabbleBoardGUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public static void main(String args[])
{
JFrame frame = new JFrame("ScrabbleTest");
ScrabbleRackGUI rack= new ScrabbleRackGUI(1);
frame.add(rack);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setSize(214,70);
frame.setVisible(true);
}
}
처음으로이 패널을 올바르게 표시하는 방법에 대한 아이디어.
또는 프로그램 끝 부분에서 크기를 조정할 수있는 해킹입니다.
나는이 문제를 재현하고자하는 사람들을위한 자바에서 SVGs를 렌더링하는 batik을 사용했다.
우리가 스크린 샷을 볼 수 – Rekin
그것은 "자바"가 아닌 "JAVA"의 [자바 약어하지 않습니다 (HTTP를 :.?. // java.sun.com/products/jdk/faq.html#B1) –