わかりました、FlowLayout に SVG であるいくつかのタイルを表示する Java プログラムがあります。クラス ScrabbleRack であり、JPanel を拡張し、JSVGCanvas タイルをこのパネルに追加することでこれを行います。
その後、フレームを作成し、パネルを追加しました。(梱包して展示しております。) 表示時に、パネルが正しく表示されません。最初のタイルを表示するだけで、残りのタイルが表示されるスペースに白い領域があります。
しかし、フレームのサイズを少しでも変更すると、画像は正しくレンダリングされます。
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);
}
}
このパネルを初めて正しく表示する方法についてのアイデア。
または、プログラムの最後にサイズを変更するハック。
この問題を再現したい人のために、バティックを使用して Java で SVG をレンダリングしました。