Código:
package MostrarImprimir;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.print.*;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;
import javax.swing.border.LineBorder;
import javax.imageio.*;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
public class MostrarImprimir extends Applet {
private JPanel centerPanel;
Image imagen;
Image imagen1;
ImagePanel imagefondo;
ImagePanel panelImagen;
private ImagePanel selected = null;
private Dimension tamañoPantalla = Toolkit.getDefaultToolkit().getScreenSize();
int zoomHabilitado;
int rotariz1;
int rotarder1;
int imageWidth;
int imageHeight;
private ZoomAction zoomAction;
RotarIz rotariz;
RotarDe rotarder;
private ImprimirAction imprimirAction;
public String ruta;
@Override
public void init() {
ruta = /*getParameter(*/ "c:\\Scanner\\4.jpg"/*"dir")*/;
JFrame frame = new JFrame("Impresión");
init2(frame.getContentPane());
//Para Cambiar icono del frame
ImageIcon logo;
logo = new ImageIcon(getClass().getResource("/resources/logo.png"));
frame.setIconImage(logo.getImage());
//Fin Cambio de logo Frame
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize((int) (tamañoPantalla.getWidth() / 2.0/*2.5*/), (int) (tamañoPantalla.getHeight() / 1.04));
frame.setResizable(false);
frame.setVisible(true);
//Aparece en el centro de la pantalla
frame.setLocationRelativeTo(null);
try {
imagen = ImageIO.read(new File(ruta));
//Esta linea redimenciona la imagen original
imagen1 = imagen.getScaledInstance(724, 1024, Image.SCALE_AREA_AVERAGING);
} catch (IOException ex) {
System.out.println("No lee imagen");
Logger.getLogger(MostrarImprimir.class.getName()).log(Level.SEVERE, null, ex);
}
imagefondo = new ImagePanel(imagen1);
centerPanel.add(imagefondo);
int sizefondo = (int) Math.round(Math.sqrt(centerPanel.getComponentCount()));
centerPanel.setLayout(new GridLayout(sizefondo, sizefondo));
centerPanel.validate();
imagefondo = new ImagePanel(imagen);
//centerPanel.add(imagefondo);
int sizefondooculto = (int) Math.round(Math.sqrt(centerPanel.getComponentCount()));
centerPanel.setLayout(new GridLayout(sizefondooculto, sizefondooculto));
centerPanel.validate();
}
public void init2(Container container) {
//Para cambiar la apariencia del Frame
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (ClassNotFoundException ex) {
Logger.getLogger(MostrarImprimir.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(MostrarImprimir.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(MostrarImprimir.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(MostrarImprimir.class.getName()).log(Level.SEVERE, null, ex);
}
//Fin Cambio apariencia
// Image imagencabeceraoriginal = Toolkit.getDefaultToolkit().createImage(MostrarImprimir.class.getClassLoader().getResource("Logo VM.png"));
// imagencabeceraoriginal = imagencabeceraoriginal.getScaledInstance((int) (tamañoPantalla.getWidth() / 3), (int) ((tamañoPantalla.getWidth() / 3) * 0.2), 0);
// ImageIcon imagencabecera = new ImageIcon();
// imagencabecera.setImage(imagencabeceraoriginal);
//JLabel cabecera = new JLabel(imagencabecera);
JToolBar toolbar = new JToolBar();
JButton imprimirButton = new JButton(imprimirAction = new ImprimirAction());
ImageIcon iconoprint = new ImageIcon(MostrarImprimir.class.getClassLoader().getResource("print.png"));
imprimirButton.setIcon(iconoprint);
imprimirButton.setToolTipText("Imprimir");
toolbar.add(imprimirButton);
toolbar.addSeparator();
JButton zoomButton = new JButton(zoomAction = new ZoomAction());
ImageIcon iconozoom = new ImageIcon(MostrarImprimir.class.getClassLoader().getResource("lupa.png"));
zoomButton.setIcon(iconozoom);
zoomButton.setToolTipText("Habilitar o deshabilitar la herramienta de Zoom");
zoomAction.setEnabled(true);
toolbar.add(zoomButton);
toolbar.addSeparator();
JButton rotarizButton = new JButton(rotariz = new RotarIz());
ImageIcon rotariz1 = new ImageIcon(MostrarImprimir.class.getClassLoader().getResource("rotariz.png"));
rotarizButton.setIcon(rotariz1);
rotarizButton.setToolTipText("Rotar Izquierda");
rotariz.setEnabled(true);
toolbar.add(rotarizButton);
toolbar.addSeparator();
JButton rotardeButton = new JButton(rotarder = new RotarDe());
ImageIcon rotardezoom = new ImageIcon(MostrarImprimir.class.getClassLoader().getResource("rotarder.png"));
rotardeButton.setIcon(rotardezoom);
rotardeButton.setToolTipText("Rotar Derecha");
rotarder.setEnabled(true);
toolbar.add(rotardeButton);
toolbar.addSeparator();
toolbar.add(Box.createHorizontalGlue());
container.add(toolbar, BorderLayout.NORTH);
container.add(centerPanel = new JPanel(), BorderLayout.CENTER);
// container.add(cabecera, BorderLayout.SOUTH);
}
private class ImagePanel extends JPanel implements Printable, MouseMotionListener {
private Image image;
int imageWidth;
int imageHeight;
int x = 0;
int y = 0;
double zoom = 0;
int movex = 0, movey = 0;
private MouseListener mouseListener = new MouseListener();
private boolean arrastrando = false;
private int xAnteriorRaton;
private int yAnteriorRaton;
ImagePanel(Image image) {
this.image = image;
imageWidth = image.getWidth(null);
imageHeight = image.getHeight(null);
addMouseListener(mouseListener);
//Dar movimiento cuando esta con zoom
addMouseMotionListener(this);
}
public Image getImage() {
return image;
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
int panelWidth = getWidth();
int panelHeight = getHeight();
double horizontalRatio = (double) panelWidth / imageWidth;
double verticalRatio = (double) panelHeight / imageHeight;
if (horizontalRatio > verticalRatio) {
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2.drawImage(image, (int) ((panelWidth - imageWidth * verticalRatio) / 2 + 3) + x, 3 + y,
(int) ((imageWidth * verticalRatio) + (imageWidth * verticalRatio * zoom)), (int) ((imageHeight * verticalRatio) + (imageHeight * verticalRatio * zoom)), this);
//g2.rotate(-270 * Math.PI / -180.0, getWidth() / 2, getHeight() / 2);
} else {
//no entra acá
g.drawImage(image, x, y, (int) ((imageWidth * horizontalRatio) + (imageWidth * horizontalRatio * zoom)), (int) ((imageHeight * horizontalRatio) + (imageHeight * horizontalRatio * zoom)), this);
}
if (rotarder1 == 1) {
//Para rotar 90 grados
g2.rotate(90 * Math.PI / 180.0, getWidth() / 2, getHeight() / 2);
// g2.rotate(90);
g2.drawImage(image, (int) ((panelWidth - imageWidth * verticalRatio) / 2 + 3) + x, 3 + y,
(int) ((imageWidth * verticalRatio) + (imageWidth * verticalRatio * zoom)), (int) ((imageHeight * verticalRatio) + (imageHeight * verticalRatio * zoom)), this);
rotarder1 = 2;
}
if (rotarder1 == 2) {
//Para rotar 90 grados
g2.rotate(180 * Math.PI / 180.0, getWidth() / 2, getHeight() / 2);
// g2.rotate(90);
g2.drawImage(image, (int) ((panelWidth - imageWidth * verticalRatio) / 2 + 3) + x, 3 + y,
(int) ((imageWidth * verticalRatio) + (imageWidth * verticalRatio * zoom)), (int) ((imageHeight * verticalRatio) + (imageHeight * verticalRatio * zoom)), this);
// rotarder1 =4;
}else{
}
/* if (rotarder1 == 4) {
//Para rotar 90 grados
g2.rotate(270 * Math.PI / 180.0, getWidth() / 2, getHeight() / 2);
// g2.rotate(90);
g2.drawImage(image, (int) ((panelWidth - imageWidth * verticalRatio) / 2 + 3) + x, 3 + y,
(int) ((imageWidth * verticalRatio) + (imageWidth * verticalRatio * zoom)), (int) ((imageHeight * verticalRatio) + (imageHeight * verticalRatio * zoom)), this);
}
*/
}
@Override
public int print(Graphics g, PageFormat f, int pageIndex) throws PrinterException {
if (pageIndex > 0) {
return NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D) g;
g2d.translate(f.getImageableX(), f.getImageableY());
try {
g.drawImage(image, 0, 0, (int) f.getImageableWidth(), (int) f.getImageableHeight(), selected);
g2d = (Graphics2D) g;
g2d.translate(f.getImageableX(), f.getImageableY());
} catch (Exception e) {
System.out.println("Problema con la impresion del archivo");
JOptionPane.showMessageDialog(centerPanel, "Ha ocurrido un error al intentar imprimir el documento.");
}
return PAGE_EXISTS;
}
@Override
public void mouseDragged(MouseEvent e) {
if ((x != 0) || (y != 0) || (movex != 0) || (movey != 0) || (zoom != 0)) {
if (!arrastrando) {
xAnteriorRaton = e.getX();
yAnteriorRaton = e.getY();
arrastrando = true;
centerPanel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
} else {
centerPanel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
x = (x + e.getX()) - xAnteriorRaton;
y = (y + e.getY()) - yAnteriorRaton;
xAnteriorRaton = e.getX();
yAnteriorRaton = e.getY();
repaint();
}
}
}
@Override
public void mouseMoved(MouseEvent e) {
arrastrando = false;
}
private class MouseListener extends MouseAdapter {
//Para mostrar el icono de Zoom en la imagen
Toolkit tk = Toolkit.getDefaultToolkit();
Image cursormas = tk.createImage(MostrarImprimir.class.getClassLoader().getResource("ZoomIn.png"));
Image cursormenos = tk.createImage(MostrarImprimir.class.getClassLoader().getResource("ZoomOut.png"));
Cursor zoommas = tk.createCustomCursor(cursormas, new Point(centerPanel.getX(), centerPanel.getY()), "Acercar");
Cursor zoommenos = tk.createCustomCursor(cursormenos, new Point(centerPanel.getX(), centerPanel.getY()), "Alejar");
//FIN mostar icono de Zoom en imagen
//Zoom Imagen
@Override
public void mouseClicked(MouseEvent event) {
if (zoomHabilitado == 1) {
if (event.isAltDown()) {
zoom = 0;
x = 0;
y = 0;
movex = 0;
movey = 0;
repaint();
} else {
if (event.getButton() == MouseEvent.BUTTON1) {
centerPanel.setCursor(zoommas);
zoom += 0.5;
x = (int) (x - (event.getX() * 0.5));
y = (int) (y - (event.getY() * 0.5));
} else {
centerPanel.setCursor(zoommenos);
zoom -= 0.5;
x = (int) (x + (event.getX() * 0.5));
y = (int) (y + (event.getY() * 0.5));
}
repaint();
}
} else {
select((ImagePanel) event.getComponent());
}
}
//Fin Zoom Imagen
//Aparece lupa con solo hacer click en el boton
@Override
public void mouseEntered(MouseEvent event) {
if (zoomHabilitado == 1) {
centerPanel.setCursor(zoommas);
centerPanel.setToolTipText("ALT + Clic: Tamaño original");
} else {
centerPanel.setCursor(Cursor.getDefaultCursor());
}
}
//Fin Aparece lupa
}
}
private void select(ImagePanel image) {
if (selected != null) {
selected.setBorder(null);
}
selected = image;
if (selected != null) {
selected.setBorder(new LineBorder(Color.blue, 1));
imprimirAction.setEnabled(true);
} else {
imprimirAction.setEnabled(false);
}
}
private class ImprimirAction extends AbstractAction {
ImprimirAction() {
//Muestra nombre
super("Imprimir");
}
@Override
public void actionPerformed(ActionEvent e) {
try {
imprimir();
//JOptionPane.showMessageDialog(centerPanel, "Se esta imprimiento el documento.");
} catch (Exception ex) {
}
}
}
private class ZoomAction extends AbstractAction {
ZoomAction() {
super("Zoom");
}
@Override
//Habilita Zoom
public void actionPerformed(ActionEvent e) {
if (zoomHabilitado == 0) {
zoomHabilitado = 1;
} else {
zoomHabilitado = 0;
}
}
}
//Clase Rotar Izquierda
private class RotarIz extends AbstractAction {
//Lo unico que hace es mostrar el texto
RotarIz() {
super("Rotar Izquierda");
}
@Override
public void actionPerformed(ActionEvent e) {
if (rotariz1 == 0) {
rotariz1 = 1;
} else {
rotariz1 = 0;
}
}
}
//Clase Rotar Derecha
private class RotarDe extends AbstractAction {
RotarDe() {
super("Rotar Derecha");
}
@Override
public void actionPerformed(ActionEvent e) {
if(rotarder1 == 0){
rotarder1 = 1;
} else {
rotarder1 = 0;
}
/* if(rotarder1==1){
rotarder1 = 2;
}*/
}
}
public void imprimir() {
PrinterJob impresion = PrinterJob.getPrinterJob();
impresion.setPrintable(imagefondo);
try {
impresion.print();
} catch (PrinterException ex) {
System.out.println("Problema con la impresion");
Logger.getLogger(MostrarImprimir.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Marcadores