![JAR search and dependency download from the Maven repository](/logo.png)
org.jemmy.image.awt.DiffDialog Maven / Gradle / Ivy
The newest version!
/*
* Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package org.jemmy.image.awt;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.image.BufferedImage;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
*
* @author shura
*/
public class DiffDialog extends javax.swing.JDialog {
private final static StrictImageComparator comparator = new StrictImageComparator();
private double scale = 1.0;
private int imageWidth, imageHeight, scaledWidth, scaledHeight;
private ImagePane left = null, right = null, diff = null;
int status = 0;
/** Creates new form ImageDiff */
DiffDialog() {
super((JDialog)null, true);
initComponents();
leftPane.setLayout(new BorderLayout());
leftPane.add(new JLabel("Golden"), BorderLayout.NORTH);
rightPane.setLayout(new BorderLayout());
rightPane.add(new JLabel("Result"), BorderLayout.NORTH);
diffPane.setLayout(new BorderLayout());
diffPane.add(new JLabel("Diff"), BorderLayout.NORTH);
getContentPane().addComponentListener(new ComponentListener() {
public void componentResized(ComponentEvent e) {
lrSplit.setDividerLocation(.5);
dcSplit.setDividerLocation(.5);
tbSplit.setDividerLocation(.5);
}
public void componentMoved(ComponentEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void componentShown(ComponentEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void componentHidden(ComponentEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
});
setSize(400, 300);
// Get the size of the screen
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
// Determine the new location of the window
int w = getSize().width;
int h = getSize().height;
int x = (dim.width - w) / 2;
int y = (dim.height - h) / 2;
// Move the window
setLocation(x, y);
}
void setImages(BufferedImage leftImage, BufferedImage rightImage) {
if (leftImage != null && rightImage != null) {
copyBtn.setEnabled(true);
removeBtn.setEnabled(false);
imageWidth = leftImage.getWidth();
imageHeight = leftImage.getHeight();
} else {
if (leftImage == null) {
copyBtn.setEnabled(true);
removeBtn.setEnabled(false);
imageWidth = rightImage.getWidth();
imageHeight = rightImage.getHeight();
} else if (rightImage == null) {
copyBtn.setEnabled(false);
removeBtn.setEnabled(true);
imageWidth = leftImage.getWidth();
imageHeight = leftImage.getHeight();
}
}
if (left == null) {
left = new ImagePane(leftImage);
} else {
left.setImage(leftImage);
}
leftPane.add(left, BorderLayout.CENTER);
if (right == null) {
right = new ImagePane(rightImage);
} else {
right.setImage(rightImage);
}
rightPane.add(right, BorderLayout.CENTER);
if (diff == null) {
diff = new ImagePane(subtract(leftImage, rightImage));
} else {
diff.setImage(subtract(leftImage, rightImage));
}
diffPane.add(diff, BorderLayout.CENTER);
rescaleAll();
}
private BufferedImage subtract(BufferedImage left, BufferedImage right) {
if(left != null && right != null) {
return ImageTool.subtractImage(left, right);
} else {
return null;
}
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// //GEN-BEGIN:initComponents
private void initComponents() {
tbSplit = new javax.swing.JSplitPane();
lrSplit = new javax.swing.JSplitPane();
leftPane = new javax.swing.JPanel();
rightPane = new javax.swing.JPanel();
dcSplit = new javax.swing.JSplitPane();
diffPane = new javax.swing.JPanel();
controlPane = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
copyBtn = new javax.swing.JButton();
removeBtn = new javax.swing.JButton();
jButton6 = new javax.swing.JButton();
jButton7 = new javax.swing.JButton();
tbSplit.setDividerLocation(200);
tbSplit.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
lrSplit.setDividerLocation(250);
javax.swing.GroupLayout leftPaneLayout = new javax.swing.GroupLayout(leftPane);
leftPane.setLayout(leftPaneLayout);
leftPaneLayout.setHorizontalGroup(
leftPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 250, Short.MAX_VALUE)
);
leftPaneLayout.setVerticalGroup(
leftPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 200, Short.MAX_VALUE)
);
lrSplit.setLeftComponent(leftPane);
javax.swing.GroupLayout rightPaneLayout = new javax.swing.GroupLayout(rightPane);
rightPane.setLayout(rightPaneLayout);
rightPaneLayout.setHorizontalGroup(
rightPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 293, Short.MAX_VALUE)
);
rightPaneLayout.setVerticalGroup(
rightPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 200, Short.MAX_VALUE)
);
lrSplit.setRightComponent(rightPane);
tbSplit.setTopComponent(lrSplit);
javax.swing.GroupLayout diffPaneLayout = new javax.swing.GroupLayout(diffPane);
diffPane.setLayout(diffPaneLayout);
diffPaneLayout.setHorizontalGroup(
diffPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE)
);
diffPaneLayout.setVerticalGroup(
diffPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 255, Short.MAX_VALUE)
);
dcSplit.setLeftComponent(diffPane);
jButton1.setMnemonic('+');
jButton1.setText("+");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setMnemonic('-');
jButton2.setText("-");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
copyBtn.setText("Copy to golgen");
copyBtn.setEnabled(false);
copyBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
copyBtnActionPerformed(evt);
}
});
removeBtn.setText("Remove from golden");
removeBtn.setEnabled(false);
removeBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeBtnActionPerformed(evt);
}
});
jButton6.setText("Next");
jButton6.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton6ActionPerformed(evt);
}
});
jButton7.setText("Exit");
jButton7.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton7ActionPerformed(evt);
}
});
javax.swing.GroupLayout controlPaneLayout = new javax.swing.GroupLayout(controlPane);
controlPane.setLayout(controlPaneLayout);
controlPaneLayout.setHorizontalGroup(
controlPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(controlPaneLayout.createSequentialGroup()
.addContainerGap(289, Short.MAX_VALUE)
.addGroup(controlPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, controlPaneLayout.createSequentialGroup()
.addComponent(jButton6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton7))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, controlPaneLayout.createSequentialGroup()
.addComponent(jButton1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton2))
.addComponent(copyBtn, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(removeBtn, javax.swing.GroupLayout.Alignment.TRAILING))
.addContainerGap())
);
controlPaneLayout.setVerticalGroup(
controlPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(controlPaneLayout.createSequentialGroup()
.addContainerGap()
.addGroup(controlPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(copyBtn)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(removeBtn)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 107, Short.MAX_VALUE)
.addGroup(controlPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton7)
.addComponent(jButton6))
.addContainerGap())
);
dcSplit.setRightComponent(controlPane);
tbSplit.setRightComponent(dcSplit);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tbSplit, javax.swing.GroupLayout.DEFAULT_SIZE, 549, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tbSplit, javax.swing.GroupLayout.DEFAULT_SIZE, 461, Short.MAX_VALUE)
);
pack();
}// //GEN-END:initComponents
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
scale *= .9;
rescaleAll();
}//GEN-LAST:event_jButton2ActionPerformed
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
scale *= 1.1;
rescaleAll();
}//GEN-LAST:event_jButton1ActionPerformed
private void rescaleAll() {
scaledWidth = (int) (imageWidth * scale);
scaledHeight = (int) (imageHeight * scale);
left.reScale();
right.reScale();
diff.reScale();
getContentPane().repaint();
}
private void copyBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_copyBtnActionPerformed
status = -1;
setVisible(false);
}//GEN-LAST:event_copyBtnActionPerformed
private void removeBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeBtnActionPerformed
status = 1;
setVisible(false);
}//GEN-LAST:event_removeBtnActionPerformed
private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed
setVisible(false);
}//GEN-LAST:event_jButton6ActionPerformed
private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton7ActionPerformed
status = -2;
setVisible(false);
}//GEN-LAST:event_jButton7ActionPerformed
private class ImagePane extends JPanel {
BufferedImage img;
java.awt.Image scaled;
public ImagePane(BufferedImage img) {
this.img = img;
}
@Override
protected void paintComponent(Graphics g) {
if (img != null) {
g.drawImage(scaled, 0, 0, this);
} else {
super.paintComponent(g);
}
}
void setImage(BufferedImage img) {
this.img = img;
reScale();
}
void reScale() {
if (img != null) {
scaled = img.getScaledInstance(scaledWidth, scaledHeight, java.awt.Image.SCALE_DEFAULT);
}
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel controlPane;
private javax.swing.JButton copyBtn;
private javax.swing.JSplitPane dcSplit;
private javax.swing.JPanel diffPane;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton6;
private javax.swing.JButton jButton7;
private javax.swing.JPanel leftPane;
private javax.swing.JSplitPane lrSplit;
private javax.swing.JButton removeBtn;
private javax.swing.JPanel rightPane;
private javax.swing.JSplitPane tbSplit;
// End of variables declaration//GEN-END:variables
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy