好的,我有一个Java程序,显示一些在FlowLayout中的SVG图块。这是通过类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);
}
}
任何想法如何让这个面板第一次正确显示?或者有一些技巧可以在程序结束时重新调整大小。
我使用 batik 在Java中渲染SVG,供那些想要重现这个问题的人参考。