好的,我有一个 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);
}
}
关于如何让这个面板第一次正确显示的任何想法。
或者一些会在程序结束时调整大小的技巧。
对于那些想要重现这个问题的人,我使用蜡染在 Java 中渲染 SVG。