JPanels除了第一个没有绘制

时间:2011-10-26 21:23:55

标签: java swing jpanel

以下代码应该读取包含一组分子结构的文件,然后添加一堆JPanels(等于分子数)并在每个面板上创建一个分子。我在运行时获得了正确的面板数量。然而,只有第一个分子被绘制在第一个面板上?

2 个答案:

答案 0 :(得分:1)

drawMolViewPanel()功能似乎有点过分。首先,panes列表似乎是临时的(您向其添加对象,然后从该列表中添加它们到MolTable自己的面板集合;我认为您不需要它)。如果我正确地理解了这个功能,这对我来说也是如此,对我来说更有意义:

public void drawMolViewPanel(String sdf) throws FileNotFoundException, CDKException
{
    ReadSDF(sdf);
    this.removeAll();

    for (int i = 0; i < this.fragments.size(); i++)
    {    
        MolViewer mv = new MolViewer();
        mv.setMolecule((Molecule)this.fragments.get(i));
        this.add(mv);
    }

    this.revalidate();
    this.repaint();
}

不幸的是,我不完全确定这是你的问题。

答案 1 :(得分:0)

ReadSDF是否正常工作?在不知道更多的情况下,可能有可能没有正确初始化片段,所以当你去访问元素时它不能正常工作时,会抛出一个被更高级别的东西捕获并忽略的异常。

Cory Larson的代码似乎应该对我有用。它在逻辑上是一样的。

我注意到你在MolViewer中覆盖'paintComponent',你调用super.paintComponents(g)(Container的方法)而不是paintComponent(JComponent的方法)。我对摆动的图形做得还不够,要知道这是否正确,所以请随意忽略这一点。

此外,(非常)小事:您正在使用LinkedLists进行随机访问。如果您使用索引号访问,ArrayList将是更好的实现。