Programación formal java
*Hice un visor de imágenes y la rueda de desplazamiento y Ctrl+ ↑↓ ajustaron el tamaño.
*/
Importar Java. awt. borderlayout;
Importar Java. cola;
Importar Java.awt.graphics;
Importar Java.awt.image;
Importar Java.awt.toolkit;
Importar evento de acción Java .
Importar evento de clave Java .
Importar Java .evento de rueda de ratón;
Importar evento de rueda de ratón de Java. >Importar Java.io.file;
Importar javax.swing.jbutton;
Importar javax.swing.jcomponent;
Importar selector de archivo javax.swing.j ;
Importar javax.swing .jframe;
Importar javax.swing .filtro de archivos;
La clase pública ScaleImageTest extiende JFrame.
public ScaleImageTest() {
this . setdefaultcloseoperative(EXIT _ ON _ CLOSE);
this.setSize(500, 400); = new JButton(" OPEN ");
open.addActionListener(new ActionListener() {
acción de anulación pública realizada (evento de acción e){
jfile selector selector = nuevo selector de jfile(" . ");
selector . setmultiselectenabled(false);
selector addchooseblefilefilter(nuevo filtro de archivo(){
. @override
público booleano aceptar(archivo f) {
if (f.isDirectory())
devuelve verdadero
Nombre de cadena = f.getName(). toLowerCase();
if (nombre.endsWith(.jpg") || nombre.endsWith(".bmp")
|| nombre.endsWith(".png")
|| nombre.endsWith(".gif")
|| nombre.endsWith(".ico")
|| nombre.endsWith(" .
jpeg”))
Devuelve verdadero
Devuelve falso
}
@Override
Cadena pública getDescription ( ) {
Devuelve "archivo de imagen";
}
});
selector showopendialog(prueba de imagen a escala. this ) ;
archivo archivo = selector . getselectedfile();
if(file==null)
return;
imagen imagen = kit de herramientas . getdefaulttoolkit(). getImage(
archivo . getpath()
panel.setImage(imagen
}
< p); >});panel = new ScaleImagePanel(null, 1);
this.add(panel, BorderLayout.center);
this.add ( open, BorderLayout. South);
addkey oyente (nuevo oyente de clave(){
Clave de anulación pública (evento clave e) {
int code = e obtener código de clave();
boolean ctrl abajo = e . iscontroldown();
double Inc = 0
if(ctrl abajo & amp; & ampcode == KeyEvent.VK_UP) {
inc = INC
} else if(ctrl abajo & ampcode == KeyEvent.VK_DOWN) {
INC = -INC;
} En caso contrario {
Regresar
}
doble nuevo pro = panel . /p>
if(new pro & lt;ScaleImagePanel.MIN_PRO
| | newpro & gtScaleImagePanel.MAX_PRO)
Return;
conjunto de paneles. proporción (nuevo profesional);
}
clave de anulación pública liberada (evento clave e){
}
anulación pública escrita ( KeyEvent e) {
}
});
this addmousewheelistener(new mousewheelistener(){
@cover
public void mousewheelemoved(MouseWheelEvent e){
int rotación = e.getWheelRotation
doble nuevo pro = panel getproportion()+INC * rotación;
if(nuevo profesional <ScaleImagePanel. MIN_PRO
| nuevopro y gtScaleImagePanel.
MAX_PRO)
Regresar;
panel establecer proporción(nuevo profesional);
}
});
}
Doble inc final estático privado = 0,25
Panel ScaleImagePanel privado;
JButton privado abierto;
Clase final estática pública ScaleImagePanel extiende JComponent {
panel de imagen de escala pública (imagen de imagen, proporción int) {
this.setImage(imagen);
this.setProportion(proporción) ;
}
public double getProportion() {
Devuelve la proporción;
}
public void setProportion (doble proporción){
if (proporción & ltMIN _ PRO | | proporción & gtMAX_PRO)
lanza una nueva IllegalArgumentException("La proporción debe estar en ["
+MIN_PRO +","+MAX_PRO+"]";
this.proportion =proportion;
this .validate();
this repaint(. );
}
Imagen pública getImage() {
Devolver imagen;
}
public void setImage(Imagen Imagen){
this.image = imagen
this valid();
this . >}
@Override
Dimensión pública getPreferredSize() {
Devolver nueva dimensión ((int)(imagen. getwidth(this)* proporción),
(int) (image.getHeight(this) *scale));
}
@overlay
Componente de pintura en blanco protegido ( gráfico g) {
if (imagen == null)
return;
tamaño de dimensión = getSize();
tamaño previo de dimensión = getPreferredSize();
int x =(tamaño . ancho-pretamaño . ancho)/2;
int y =(tamaño . alto-presimenaje . alto) /2;
g.drawImage(imagen, x, y, presize.width, presize.height, this);
}
Proporción privada = 1;
Imagen de imagen privada;
Doble final estático privado MAX_PRO = 8;
Doble final estático privado MIN_PRO = 0,25
}
/**
* @param args
*/
Public static void main(String[] args ) {
EventQueue.invokeLater(new Runnable() {
Public void Runnable(){
Nueva prueba de imagen de escala(). establecer visible(verdadero);
}
});
}
}