當前位置:編程學習大全網 - 編程語言 - java編程,涉及圖形界面

java編程,涉及圖形界面

/*

* 我做的壹個圖片查看器,滾輪和ctrl+↑↓調整大小。

*/

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.EventQueue;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.awt.event.MouseWheelEvent;

import java.awt.event.MouseWheelListener;

import java.io.File;

import javax.swing.JButton;

import javax.swing.JComponent;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.filechooser.FileFilter;

public class ScaleImageTest extends JFrame {

public ScaleImageTest() {

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setSize(500, 400);

open = new JButton("OPEN");

open.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

JFileChooser chooser = new JFileChooser(".");

chooser.setMultiSelectionEnabled(false);

chooser.addChoosableFileFilter(new FileFilter() {

@Override

public boolean accept(File f) {

if (f.isDirectory())

return true;

String name = f.getName().toLowerCase();

if (name.endsWith(".jpg") || name.endsWith(".bmp")

|| name.endsWith(".png")

|| name.endsWith(".gif")

|| name.endsWith(".ico")

|| name.endsWith(".jpeg"))

return true;

return false;

}

@Override

public String getDescription() {

return "圖像文件";

}

});

chooser.showOpenDialog(ScaleImageTest.this);

File file = chooser.getSelectedFile();

if(file==null)

return;

Image image = Toolkit.getDefaultToolkit().getImage(

file.getPath());

panel.setImage(image);

}

});

panel = new ScaleImagePanel(null, 1);

this.add(panel, BorderLayout.CENTER);

this.add(open, BorderLayout.SOUTH);

addKeyListener(new KeyListener() {

public void keyPressed(KeyEvent e) {

int code = e.getKeyCode();

boolean ctrlDown = e.isControlDown();

double inc = 0;

if (ctrlDown && code == KeyEvent.VK_UP) {

inc = INC;

} else if (ctrlDown && code == KeyEvent.VK_DOWN) {

inc = -INC;

} else {

return;

}

double newpro = panel.getProportion() + inc;

if (newpro < ScaleImagePanel.MIN_PRO

|| newpro > ScaleImagePanel.MAX_PRO)

return;

panel.setProportion(newpro);

}

public void keyReleased(KeyEvent e) {

}

public void keyTyped(KeyEvent e) {

}

});

this.addMouseWheelListener(new MouseWheelListener() {

@Override

public void mouseWheelMoved(MouseWheelEvent e) {

int rotation = e.getWheelRotation();

double newpro = panel.getProportion() + INC * rotation;

if (newpro < ScaleImagePanel.MIN_PRO

|| newpro > ScaleImagePanel.MAX_PRO)

return;

panel.setProportion(newpro);

}

});

}

private static final double INC = 0.25;

private ScaleImagePanel panel;

private JButton open;

public static final class ScaleImagePanel extends JComponent {

public ScaleImagePanel(Image image, int proportion) {

this.setImage(image);

this.setProportion(proportion);

}

public double getProportion() {

return proportion;

}

public void setProportion(double proportion) {

if (proportion < MIN_PRO || proportion > MAX_PRO)

throw new IllegalArgumentException("Proportion must be in [ "

+ MIN_PRO + ", " + MAX_PRO + "]");

this.proportion = proportion;

this.validate();

this.repaint();

}

public Image getImage() {

return image;

}

public void setImage(Image image) {

this.image = image;

this.validate();

this.repaint();

}

@Override

public Dimension getPreferredSize() {

return new Dimension((int) (image.getWidth(this) * proportion),

(int) (image.getHeight(this) * proportion));

}

@Override

protected void paintComponent(Graphics g) {

if (image == null)

return;

Dimension size = getSize();

Dimension presize = getPreferredSize();

int x = (size.width - presize.width) / 2;

int y = (size.height - presize.height) / 2;

g.drawImage(image, x, y, presize.width, presize.height, this);

}

private double proportion = 1;

private Image image;

private static final double MAX_PRO = 8;

private static final double MIN_PRO = 0.25;

}

/**

* @param args

*/

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

new ScaleImageTest().setVisible(true);

}

});

}

}

  • 上一篇:東營中公教育培訓機構電話
  • 下一篇:編程培訓班多少錢壹個月
  • copyright 2024編程學習大全網