JPanels кроме первого не нарисован - PullRequest
0 голосов
/ 27 октября 2011

Следующий код должен прочитать файл, содержащий набор молекулярных структур, затем добавить группу JPanels (равную числу молекул) и создать молекулу на каждой панели. Я получаю право нет панелей во время выполнения. Однако только первая молекула нарисована на первой панели?

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Функция 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();
}

Я не совсем уверен, что это ваша проблема, к сожалению.

0 голосов
/ 27 октября 2011

Правильно ли работает ReadSDF? Не зная гораздо большего, возможно, что фрагменты не инициализируются должным образом, поэтому, когда вы обращаетесь к элементам, они не работают должным образом, генерируется исключение, которое перехватывается и игнорируется чем-то более высоким.

Код Кори Ларсона, похоже, должен работать для меня. Это логически то же самое.

Я заметил, что когда вы переопределяете 'paintComponent' в MolViewer, вы вызываете super.paintComponents (g) (метод Container), а не paintComponent (метод JComponent). Я не сделал достаточно с графикой в ​​разгаре, чтобы знать, если это правильно, так что не стесняйтесь игнорировать это.

Кроме того, (очень) небольшая вещь: вы используете LinkedLists для произвольного доступа. В целом ArrayList будет лучшей реализацией, если вы используете индексный номер.

...