以下代码应该读取包含一组分子结构的文件,然后添加一堆JPanels(等于分子数)并在每个面板上创建一个分子。我在运行时获得了正确的面板数量。然而,只有第一个分子被绘制在第一个面板上?
答案 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将是更好的实现。