import chemaxon.formats.MolImporter;
import chemaxon.struc.Molecule;
import chemaxon.marvin.MolPrinter;
import javax.swing.*;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.awt.*;
import java.io.File;
import java.io.IOException;
@author
@version
@since
public class SimpleJFileChooserAccessory extends JPanel
implements PropertyChangeListener {
private MolImporter molImporter;
private MoleculeRenderer renderer;
public SimpleJFileChooserAccessory(JFileChooser fileChooser) {
molImporter = new MolImporter();
renderer = new MoleculeRenderer();
fileChooser.addPropertyChangeListener(
JFileChooser.SELECTED_FILE_CHANGED_PROPERTY, this);
setLayout(new BorderLayout());
add(renderer, BorderLayout.CENTER);
renderer.setPreferredSize(new Dimension(100,100));
}
public void propertyChange(PropertyChangeEvent evt) {
File selection = (File)(evt.getNewValue());
if(selection != null) {
try {
molImporter.setFileName(selection.getAbsolutePath());
setMolecule();
} catch (IOException exception) {
renderer.setMolecule(new Molecule());
}
}
}
private void setMolecule() {
try {
renderer.setMolecule(
molImporter.nextDoc().getPrimaryMolecule());
renderer.repaint();
} catch (IOException exception) {
renderer.setMolecule(new Molecule());
}
}
private static void createAndShowGUI() {
JFileChooser fileChooser = new JFileChooser();
SimpleJFileChooserAccessory accessory =
new SimpleJFileChooserAccessory(fileChooser);
fileChooser.setAccessory(accessory);
fileChooser.showOpenDialog(null);
System.exit(0);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run() {
createAndShowGUI();
}
});
}
private static class MoleculeRenderer extends JComponent {
private MolPrinter mPrinter = new MolPrinter();
public void setMolecule(Molecule molecule) {
mPrinter.setMol(molecule);
}
public void paintComponent(Graphics g) {
mPrinter.setScale(mPrinter.maxScale(getSize()));
mPrinter.setBackgroundColor(this.getBackground());
mPrinter.paint((Graphics2D) g, getSize());
}
}
}