206 lines
5.6 KiB
Java
206 lines
5.6 KiB
Java
![]() |
/*
|
||
|
* DPanel.java
|
||
|
*/
|
||
|
|
||
|
package stegsolve;
|
||
|
|
||
|
import javax.swing.*;
|
||
|
import java.awt.datatransfer.DataFlavor;
|
||
|
import java.awt.datatransfer.Transferable;
|
||
|
import java.awt.dnd.*;
|
||
|
import java.awt.image.*;
|
||
|
import java.awt.*;
|
||
|
import java.io.File;
|
||
|
import java.util.TooManyListenersException;
|
||
|
|
||
|
/**
|
||
|
* A JPanel with an image attached to it
|
||
|
* @author Caesum
|
||
|
*/
|
||
|
public class DPanel extends JPanel
|
||
|
{
|
||
|
private Dimension preferredSize = new Dimension(200, 200);
|
||
|
private Dimension defaultSize = new Dimension();
|
||
|
private Dimension currentSize = new Dimension();
|
||
|
|
||
|
private DropTarget dropTarget;
|
||
|
private DropTargetHandler dropTargetHandler;
|
||
|
private Point dragPoint;
|
||
|
|
||
|
private boolean dragOver = false;
|
||
|
|
||
|
public DPanel() {
|
||
|
//setBackground(Color.RED);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* The image attached to this panel
|
||
|
*/
|
||
|
private BufferedImage bi = null;
|
||
|
|
||
|
/**
|
||
|
* Overridden paint method for the panel which
|
||
|
* paints the image on the panel
|
||
|
* @param g graphics object
|
||
|
*/
|
||
|
@Override
|
||
|
protected void paintComponent(Graphics g) {
|
||
|
super.paintComponent(g);
|
||
|
if(bi!=null)
|
||
|
g.drawImage(bi, 0, 0, currentSize.width, currentSize.height, this);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sets the image for the panel, and calls
|
||
|
* repaint
|
||
|
* @param bix Image to show on the panel
|
||
|
*/
|
||
|
public void setImage(BufferedImage bix)
|
||
|
{
|
||
|
bi = bix;
|
||
|
defaultSize.width = bi.getWidth();
|
||
|
defaultSize.height = bi.getHeight();
|
||
|
setSize(bi.getWidth(), bi.getHeight());
|
||
|
repaint();
|
||
|
//apply(100);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public Dimension getPreferredSize() {
|
||
|
return preferredSize;
|
||
|
}
|
||
|
|
||
|
public void apply(int percent) {
|
||
|
currentSize.width = (int)(defaultSize.width * (((float)percent)/100));
|
||
|
currentSize.height = (int)(defaultSize.height * (((float)percent)/100));
|
||
|
preferredSize = currentSize;
|
||
|
revalidate();
|
||
|
repaint();
|
||
|
}
|
||
|
|
||
|
protected class DropTargetHandler implements DropTargetListener {
|
||
|
|
||
|
protected void processDrag(DropTargetDragEvent dtde) {
|
||
|
if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
|
||
|
dtde.acceptDrag(DnDConstants.ACTION_COPY);
|
||
|
} else {
|
||
|
dtde.rejectDrag();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void dragEnter(DropTargetDragEvent dtde) {
|
||
|
processDrag(dtde);
|
||
|
SwingUtilities.invokeLater(new DragUpdate(true, dtde.getLocation()));
|
||
|
repaint();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void dragOver(DropTargetDragEvent dtde) {
|
||
|
processDrag(dtde);
|
||
|
SwingUtilities.invokeLater(new DragUpdate(true, dtde.getLocation()));
|
||
|
repaint();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void dropActionChanged(DropTargetDragEvent dtde) {
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void dragExit(DropTargetEvent dte) {
|
||
|
SwingUtilities.invokeLater(new DragUpdate(false, null));
|
||
|
repaint();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void drop(DropTargetDropEvent dtde) {
|
||
|
|
||
|
SwingUtilities.invokeLater(new DragUpdate(false, null));
|
||
|
|
||
|
Transferable transferable = dtde.getTransferable();
|
||
|
if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
|
||
|
dtde.acceptDrop(dtde.getDropAction());
|
||
|
try {
|
||
|
java.util.List transferData = (java.util.List) transferable.getTransferData(DataFlavor.javaFileListFlavor);
|
||
|
|
||
|
if (transferData.size() == 1) {
|
||
|
StegSolve.that.loadImage((File)transferData.get(0));
|
||
|
dtde.dropComplete(true);
|
||
|
}
|
||
|
|
||
|
} catch (Exception ex) {
|
||
|
ex.printStackTrace();
|
||
|
}
|
||
|
} else {
|
||
|
dtde.rejectDrop();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected DropTarget getMyDropTarget() {
|
||
|
if (dropTarget == null) {
|
||
|
dropTarget = new DropTarget(this, DnDConstants.ACTION_COPY_OR_MOVE, null);
|
||
|
}
|
||
|
return dropTarget;
|
||
|
}
|
||
|
|
||
|
protected DropTargetHandler getDropTargetHandler() {
|
||
|
if (dropTargetHandler == null) {
|
||
|
dropTargetHandler = new DropTargetHandler();
|
||
|
}
|
||
|
return dropTargetHandler;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void addNotify() {
|
||
|
super.addNotify();
|
||
|
try {
|
||
|
getMyDropTarget().addDropTargetListener(getDropTargetHandler());
|
||
|
} catch (TooManyListenersException ex) {
|
||
|
ex.printStackTrace();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void removeNotify() {
|
||
|
super.removeNotify();
|
||
|
getMyDropTarget().removeDropTargetListener(getDropTargetHandler());
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
@Override
|
||
|
protected void paintComponent(Graphics g) {
|
||
|
super.paintComponent(g);
|
||
|
if (dragOver) {
|
||
|
Graphics2D g2d = (Graphics2D) g.create();
|
||
|
g2d.setColor(new Color(0, 255, 0, 64));
|
||
|
g2d.fill(new Rectangle(getWidth(), getHeight()));
|
||
|
if (dragPoint != null && target != null) {
|
||
|
int x = dragPoint.x - 12;
|
||
|
int y = dragPoint.y - 12;
|
||
|
g2d.drawImage(target, x, y, this);
|
||
|
}
|
||
|
g2d.dispose();
|
||
|
}
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
public class DragUpdate implements Runnable {
|
||
|
|
||
|
private boolean dragOver;
|
||
|
private Point dragPoint;
|
||
|
|
||
|
public DragUpdate(boolean dragOver, Point dragPoint) {
|
||
|
this.dragOver = dragOver;
|
||
|
this.dragPoint = dragPoint;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void run() {
|
||
|
DPanel.this.dragOver = dragOver;
|
||
|
DPanel.this.dragPoint = dragPoint;
|
||
|
DPanel.this.repaint();
|
||
|
}
|
||
|
}
|
||
|
}
|