学习java中的图片处理
package xjj; import java.awt.Cursor; import java.awt.Image; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Random; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.Timer; public class HitMouse extends JFrame implements ActionListener, MouseListener { boolean isOver = false;// 设置标记,游戏是否结束 private String dir = "./images/";// 图片目录,当前工程下 JLabel jlbMouse;// 地鼠 Timer timer;// 时间定时器 Random random;// 随机数对象,即生成地鼠的位置 int delay = 1100;// 延迟时间 Toolkit tk; Image image; Cursor myCursor; boolean isHit = false; JLabel showNum, currentGrade, hitNum; int showNumber = 0, hitNumber = 0, currentGrades = 1; public HitMouse() { super("打地鼠"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(449, 395); this.setLocationRelativeTo(null);// 设置窗口在屏幕中心 setbackground();// 设置背景 this.addMouseListener(this); this.getContentPane().setLayout(null);// 设置框架布局模式为空,只有这样,才能知道图片的真正位置 // 设置鼠标为锤子图片 tk = Toolkit.getDefaultToolkit(); image = tk.createImage(dir + "chui1.png"); myCursor = tk.createCustomCursor(image, new Point(10, 10), "xxx"); this.setCursor(myCursor); setMessage();// 设置一些提示信息 // 在背景图片的基础上设置地鼠图片 ImageIcon imageMouse = new ImageIcon(dir + "dishu.png"); jlbMouse = new JLabel(imageMouse); jlbMouse.setSize(80, 80); this.getContentPane().add(jlbMouse); jlbMouse.setVisible(false); jlbMouse.addMouseListener(this);// 添加鼠标监听 // 定时器 timer = new Timer(delay, this); random = new Random(); timer.start(); addMenu();// 添加菜单 this.setResizable(false);// 设置窗口大小不能改变 this.setVisible(true); } private void addMenu() { JMenuBar menubar = new JMenuBar(); this.setJMenuBar(menubar); JMenu game = new JMenu("游戏"); JMenuItem jitemNew = new JMenuItem("新游戏"); jitemNew.setActionCommand("new"); jitemNew.addActionListener(this); JMenuItem jitemPause = new JMenuItem("暂停"); jitemPause.setActionCommand("pause"); jitemPause.addActionListener(this); JMenuItem jitemExit = new JMenuItem("退出"); jitemExit.setActionCommand("exit"); jitemExit.addActionListener(this); game.add(jitemNew); game.add(jitemPause); game.addSeparator();// 菜单里设置分隔线 game.add(jitemExit); menubar.add(game); } private void setbackground() { ((JPanel) (this.getContentPane())).setOpaque(false);// 如果为 // true,则该组件绘制其边界内的所有像素。否则该组件可能不绘制部分或所有像素,从而允许其底层像素透视出来。 ImageIcon bgImage = new ImageIcon("images/beijing.jpg"); JLabel bgLabel = new JLabel(bgImage); bgLabel.setBounds(0, 25, bgImage.getIconWidth(), bgImage .getIconHeight()); this.getLayeredPane().add(bgLabel, new Integer(Integer.MIN_VALUE));// 设置背景图片的层次最低 } private void setMessage() { ImageIcon showNumb = new ImageIcon(dir + "chuxiancishu.png"); JLabel showLabel = new JLabel(showNumb); showLabel.setBounds(8, 8, 92, 80); this.getContentPane().add(showLabel); showNum = new JLabel("0"); showNum.setBounds(110, 8, 92, 80); this.getContentPane().add(showNum); ImageIcon hitNumb = new ImageIcon(dir + "dazhongcishu.png"); JLabel hitLabel = new JLabel(hitNumb); hitLabel.setBounds(148, 8, 92, 80); this.getContentPane().add(hitLabel); hitNum = new JLabel("0"); hitNum.setBounds(251, 8, 92, 80); this.getContentPane().add(hitNum); ImageIcon grade = new ImageIcon(dir + "dangqiandengji.png"); JLabel gradeLabel = new JLabel(grade); gradeLabel.setBounds(288, 8, 92, 80); this.getContentPane().add(gradeLabel); currentGrade = new JLabel("1"); currentGrade.setBounds(391, 8, 92, 80); this.getContentPane().add(currentGrade); } public static void main(String[] args) { new HitMouse(); } public void actionPerformed(ActionEvent e) { // 对菜单项注册事件监听 if (e.getSource() instanceof JMenuItem) { menuItemFun(e); } int ran = random.nextInt(9);// 随机生成一个0~9(不包括9)的随机数 ImageIcon imageMouse = new ImageIcon(dir + "dishu.png");// 保证每次随机生成的地鼠图片都是为没被打时的图片 jlbMouse.setIcon(imageMouse); switch (ran) { case 0: jlbMouse.setLocation(55, 63); break; case 1: jlbMouse.setLocation(321, 204); break; case 2: jlbMouse.setLocation(184, 204); break; case 3: jlbMouse.setLocation(47, 203); break; case 4: jlbMouse.setLocation(297, 133); break; case 5: jlbMouse.setLocation(161, 133); break; case 6: jlbMouse.setLocation(21, 133); break; case 7: jlbMouse.setLocation(310, 63); break; case 8: jlbMouse.setLocation(185, 63); break; } jlbMouse.setVisible(true); showNumber++; isHit = false; showNum.setText("" + showNumber); if (!gamePlan()) {// 判断游戏是否结束,并显示游戏进程 timer.stop(); } } // 监听菜单功能功能 private void menuItemFun(ActionEvent e) { if (e.getActionCommand().equalsIgnoreCase("new")) {// 新游戏 timer.stop(); showNumber = 0; hitNumber = 0; currentGrades = 1; delay = 1000; isOver = false; showNum.setText("" + showNumber); hitNum.setText("" + hitNumber); currentGrade.setText("" + currentGrades); timer = new Timer(delay, this); timer.start(); } if (e.getActionCommand().equalsIgnoreCase("exit")) {// 退出 System.exit(EXIT_ON_CLOSE); } if (e.getActionCommand().equalsIgnoreCase("pause")) {// 暂停 timer.stop(); JOptionPane.showMessageDialog(this, "继续请按“确定”"); timer.start(); } } private boolean gamePlan() { if (showNumber - hitNumber > 8) { JOptionPane.showMessageDialog(this, "Game Over !"); isOver = true; return false; } if (hitNumber > 5) { hitNumber = 0; showNumber = 0; currentGrades++; if (delay > 100) { delay -= 50; } else if (delay >= 500) { delay = 500; } timer.setDelay(delay); hitNum.setText("" + hitNumber); showNum.setText("" + showNumber); currentGrade.setText("" + currentGrades); } return true; } public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { if (isOver) { return; } image = tk.createImage(dir + "chui2.png"); myCursor = tk.createCustomCursor(image, new Point(10, 10), "xxx"); this.setCursor(myCursor);// 鼠标按下时,鼠标显示打下去的图片,模拟打的动作 // 如果打中地鼠,则地鼠换成被打中的图片,模拟地鼠被打 if (e.getSource() == jlbMouse&& !isHit) { isHit = true; ImageIcon imageIconHit = new ImageIcon(dir + "datou.png"); jlbMouse.setIcon(imageIconHit); jlbMouse.setVisible(true); hitNumber++; hitNum.setText("" + hitNumber); } } public void mouseReleased(MouseEvent e) { if (isOver) { return; } // 当鼠标放松以后,鼠标变回原来没按下时的图片 image = tk.createImage(dir + "chui1.png"); myCursor = tk.createCustomCursor(image, new Point(10, 10), "xxx"); this.setCursor(myCursor); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }