下面的代码读取一个包含一组分子结构的文件,然后添加一堆JPanels (等于分子的数量),并在每个面板上创建一个分子。我在运行时得到了正确的面板编号。然而,在第一个面板上只绘制了第一个分子?
发布于 2011-10-27 05:35:28
drawMolViewPanel()函数似乎有点过度设计。首先,面板列表似乎大多是临时性的(您向其中添加对象,然后从该列表中将它们添加到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();
}不幸的是,我不完全确定这是你的问题。
发布于 2011-10-27 10:36:13
ReadSDF是否正常工作?在不知道更多的情况下,片段可能没有被正确地初始化,所以当你去访问元素时,它不能正常工作,就会抛出一个异常,这个异常会被更高级别的东西捕获并忽略。
在我看来,Cory Larson的代码应该可以工作。它在逻辑上是相同的。
我注意到在MolViewer中重写' paintComponent‘的地方,调用的是super.paintComponents(g) (容器的方法),而不是paintComponent(JComponent的方法)。我还没有对swing中的图形做足够的工作来了解这是否正确,所以可以忽略这一点。
此外,还有一件(非常)小的事情:您正在使用LinkedLists进行随机访问。一般来说,如果您使用索引号进行访问,ArrayList将是一个更好的实现。
https://stackoverflow.com/questions/7909107
复制相似问题