import chemaxon.struc.Molecule;
import chemaxon.marvin.beans.MViewPane;
import chemaxon.formats.MolImporter;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.AbstractTableModel;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.ArrayList;
<p>
<br>
@link<br>
@link
<p>
http://www.chemaxon.com/marvin/examples/beans/view-jtable/index.html
@author
@author
@version
@since
public class ViewJTable extends JPanel {
private JTable table;
public ViewJTable() {
MoleculeTableModel molModel = new MoleculeTableModel();
table = new JTable(molModel);
table.setPreferredScrollableViewportSize(new Dimension(400, 450));
table.setRowHeight(150);
setUpMolRenderer(table);
setUpMolEditor(table);
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setViewportView(table);
add(scrollPane);
}
@param
private static void createAndShowGUI(ArrayList<Molecule> mols) {
JFrame frame = new JFrame();
frame.setTitle("MarvinView in JTable Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ViewJTable viewJTable = new ViewJTable();
viewJTable.setMolecules(mols);
frame.getContentPane().add(viewJTable, BorderLayout.CENTER);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private void setMolecules(ArrayList<Molecule> mols) {
MoleculeTableModel tm = (MoleculeTableModel)table.getModel();
tm.setMolecules(mols);
table.setModel(tm);
}
@param
private void setUpMolEditor(JTable table) {
MViewEditor me = new MViewEditor();
me.setEditable(MViewPane.SKETCHABLE);
table.setDefaultEditor(Molecule.class, me);
}
@param
private void setUpMolRenderer(JTable table) {
table.setDefaultRenderer(Molecule.class, new MViewRenderer());
table.setDefaultRenderer(String.class, new StringRenderer());
}
public static void main(String[] args) {
final ArrayList<Molecule> mols = new ArrayList<Molecule>();
if(args==null || args.length==0) {
try {
mols.add(MolImporter.importMol("C1CCCC1"));
mols.add(MolImporter.importMol("C1=CC2=C(C=C1)C=CC=C2"));
mols.add(MolImporter.importMol(
"CN1C=NC2=C1C(=O)N(C)C(=O)N2C"));
mols.add(MolImporter.importMol("N1C=CC=C1"));
}
catch (Exception e) {
e.printStackTrace();
}
}
else {
try {
MolImporter mi = new MolImporter(args[0]);
Molecule mol;
while((mol = mi.read())!=null) {
mols.add(mol);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI(mols);
}
});
}
private static class StringRenderer extends DefaultTableCellRenderer {
public StringRenderer() {
setHorizontalAlignment( javax.swing.SwingConstants.CENTER );
}
}
private static class MoleculeTableModel extends AbstractTableModel {
final String[] columnNames = {"Index", "Molecule", "Mass"};
Object[][] data = {};
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
return col == 1;
}
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
if(col==1) {
setValueAt(""+((Molecule)value).getMass(), row, 2);
}
fireTableCellUpdated(row, col);
}
public void setMolecules(ArrayList<Molecule> mols) {
data = new Object[mols.size()][3];
for(int i=0; i<mols.size(); i++) {
setValueAt(""+(i+1), i, 0);
setValueAt(mols.get(i), i, 1);
}
}
}
}