gpt4 book ai didi

java - Java 中的 SVG 显示不正确

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:19:29 26 4
gpt4 key购买 nike

好的,我有一个 Java 程序,它在 FlowLayout 中显示一些作为 SVG 的图 block 。它通过成为一个类 ScrabbleRack 并扩展 JPanel,然后将 JSVGCanvas 图 block 添加到该面板来实现这一点。

然后我创建了一个框架并添加了面板,这个。 (打包并展示)。出现时,面板显示不正常。它只显示第一个图 block ,然后在应该显示其余图 block 的空间中有白色区域。

但如果我将框架的大小调整任意数量,图像将正确呈现。

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);

}
}

关于如何让这个面板在第一时间正确显示的任何想法。

或者一些会在程序结束时调整它大小的 hack。


我用了batik在 Java 中呈现 SVG,对于那些想要重现此问题的人。

最佳答案

您的问题可能是您的 GUI 构建没有在 EDT 上完成。

你的主要应该是这样的:

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
MyWindow window = new MyWindow();
MyWindow.setVisible(true);
}
});
}

当前 main 中的其余代码应该在 MyWindow 构造函数中。

更多详细信息,请访问http://leepoint.net/JavaBasics/gui/gui-commentary/guicom-main-thread.html。 (以及其他地方)

关于java - Java 中的 SVG 显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2772197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com