import chemaxon.marvin.beans.MSketchPane;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingConstants;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Insets;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
http://www.chemaxon.com/marvin/examples/beans/sketch-images/index.html
@version
@author
@author
@since
public class SketchImages extends JPanel {
private MSketchPane sketchPane;
private JLabel imageArea, imageSize;
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
JFrame sketch = new JFrame();
sketch.setTitle("MarvinSketch Images Example");
sketch.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SketchImages sketchImages = new SketchImages();
sketch.getContentPane().setLayout(new BorderLayout());
sketch.getContentPane().add(sketchImages, BorderLayout.CENTER);
sketch.pack();
sketch.setLocationRelativeTo(null);
sketch.setVisible(true);
}
public SketchImages() {
sketchPane = new MSketchPane();
sketchPane.setPreferredSize(new Dimension(430, 400));
JPanel importExportPanel = createGetImagePanel();
imageSize = new JLabel();
updateImageSizeLabel(0, 0);
setLayout(new BorderLayout());
add(sketchPane, BorderLayout.NORTH);
add(importExportPanel, BorderLayout.CENTER);
add(imageSize, BorderLayout.SOUTH);
}
public void getSketchImagePerformed() {
if(sketchPane.getMol()==null) {
imageArea.setIcon(null);
updateImageSizeLabel(0, 0);
}
else {
double currentScale = sketchPane.getScale();
Image canvasImage = sketchPane.getImage(currentScale);
imageArea.setIcon(new ImageIcon(canvasImage));
updateImageSizeLabel(canvasImage.getWidth(null),
canvasImage.getHeight(null));
}
imageArea.invalidate();
imageArea.repaint();
}
public void getMolImagePerformed() {
if(sketchPane.getMol()==null) {
imageArea.setIcon(null);
updateImageSizeLabel(0, 0);
}
else {
String format = "png:w200,h200,maxscale28,transbg,#ffffffff";
byte[] imageData = sketchPane.getMol().toBinFormat(format);
ImageIcon icon = new ImageIcon(imageData);
imageArea.setIcon(icon);
updateImageSizeLabel(icon.getIconWidth(), icon.getIconHeight());
}
imageArea.invalidate();
imageArea.repaint();
}
private void updateImageSizeLabel(int w, int h) {
imageSize.setText("Image dimensions: ["+w+", "+h+"]");
}
private JPanel createGetImagePanel() {
JPanel getImagePanel = new JPanel();
getImagePanel.setLayout(new GridBagLayout());
((GridBagLayout)getImagePanel.getLayout()).columnWidths =
new int[] {0, 0};
((GridBagLayout)getImagePanel.getLayout()).rowHeights =
new int[] {5, 0, 5, 0, 0};
((GridBagLayout)getImagePanel.getLayout()).columnWeights =
new double[] {1.0, 1.0E-4};
((GridBagLayout)getImagePanel.getLayout()).rowWeights =
new double[] {0.0, 0.0, 0.0, 1.0, 1.0E-4};
JButton getSketchImageButton = new JButton();
getSketchImageButton.setText("Get Sketch Image");
getSketchImageButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
getSketchImagePerformed();
}
});
JButton getMolImageButton = new JButton();
getMolImageButton.setText("Get Molecule Image");
getMolImageButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
getMolImagePerformed();
}
});
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
buttonPanel.add(Box.createHorizontalGlue());
buttonPanel.add(getSketchImageButton);
buttonPanel.add(Box.createHorizontalStrut(10));
buttonPanel.add(getMolImageButton);
buttonPanel.add(Box.createHorizontalGlue());
imageArea = new JLabel();
imageArea.setBackground(new Color(237, 210, 184));
imageArea.setOpaque(true);
imageArea.setHorizontalAlignment(SwingConstants.CENTER);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(imageArea);
scrollPane.setPreferredSize(new Dimension(200, 200));
getImagePanel.add(buttonPanel,
new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
getImagePanel.add(scrollPane,
new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
return getImagePanel;
}
}