package org.geotools.image.test; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; import java.awt.image.WritableRaster; import javax.media.jai.widget.ScrollingImagePanel; import javax.swing.BorderFactory; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.border.LineBorder; class CompareImageDialog extends JDialog { private static final long serialVersionUID = -8640087805737551918L; boolean accept = false; public CompareImageDialog(RenderedImage expected, RenderedImage actual, boolean showCommands) { JPanel content = new JPanel(new BorderLayout()); this.setContentPane(content); this.setTitle("ImageAssert"); final JLabel topLabel = new JLabel( "<html><body>PerceptualDiff thinks the two images are perceptibly different.</html></body>"); topLabel.setBorder(new EmptyBorder(4, 4, 4, 4)); content.add(topLabel, BorderLayout.NORTH); JPanel central = new JPanel(new GridLayout(1, 2)); central.add(titledImagePanel("Expected", expected)); central.add(titledImagePanel("Actual", actual)); content.add(central); JPanel commands = new JPanel(new FlowLayout(FlowLayout.RIGHT)); JButton accept = new JButton("Overwrite reference"); accept.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { CompareImageDialog.this.accept = true; CompareImageDialog.this.setVisible(false); } }); JButton reject = new JButton("Images are different"); reject.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { CompareImageDialog.this.accept = false; CompareImageDialog.this.setVisible(false); } }); commands.add(accept); commands.add(reject); commands.setVisible(showCommands); content.add(commands, BorderLayout.SOUTH); pack(); } private Component titledImagePanel(String string, RenderedImage expected) { JPanel panel = new JPanel(new BorderLayout()); final JLabel title = new JLabel(string); title.setAlignmentX(0.5f); title.setBorder(new LineBorder(Color.BLACK)); panel.add(title, BorderLayout.NORTH); panel.add(new ScrollingImagePanel(expected, 400, 400), BorderLayout.CENTER); return panel; } public static boolean show(RenderedImage expected, RenderedImage actual, boolean showCommands) { CompareImageDialog dialog = new CompareImageDialog(expected, actual, showCommands); dialog.setModal(true); dialog.setVisible(true); return dialog.accept; } }