| Код | import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.filechooser.FileFilter; import java.io.*; import java.awt.image.*; import javax.imageio.*; import java.net.*;
public class WorkWithImage extends JFrame { MyChooser chooser = new MyChooser();
WorkWithImage() { setBounds(100, 100, 400, 300); setJMenuBar(new MyMenu(this)); }
public static void main(String [] args) { JFrame f = new WorkWithImage(); f.setVisible(true); f.setDefaultCloseOperation(3); } }
class MyMenu extends JMenuBar implements ActionListener { WorkWithImage f;
MyMenu(WorkWithImage f) { this.f = f; JMenu file = new JMenu("File"); JMenuItem open = new JMenuItem("Open file"); JMenuItem exit = new JMenuItem("Exit");
file.add(open); file.add(exit); add(file);
open.addActionListener(this); exit.addActionListener(this); }
public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("Exit")) System.exit(0);
else { MyChooser chooser = f.chooser; int x = chooser.showOpenDialog(null);
if(x == JFileChooser.APPROVE_OPTION) { MyPanel panel = new MyPanel(); panel.setImageFile(new File(chooser.getSelectedFile().getAbsolutePath())); f.add(panel); f.validate(); f.repaint(); } } } }
class MyChooser extends JFileChooser { MyChooser() { setFileFilter(new MyFilter()); }
class MyFilter extends FileFilter { public boolean accept(File file) { if(file.isDirectory()) return true; return file.getName().endsWith("gif"); }
public String getDescription() { return ".gif"; } } }
class MyPanel extends JPanel implements MouseMotionListener { BufferedImage originalImage = null; Image image = null; static Point oldPoint = null; static Point newPoint = null;
MyPanel() { initComponents(); addMouseMotionListener(this); }
public void mouseMoved(MouseEvent e) { oldPoint = e.getPoint(); } public void mouseDragged(MouseEvent e) { newPoint = e.getPoint(); repaint(); } private void initComponents() { setLayout(null);
addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { formComponentResized(e); } }); } private void formComponentResized(ComponentEvent e) { int w = getWidth(); int h = getHeight();
if ((originalImage != null) && (w > 0) && (h > 0)) { image = originalImage.getScaledInstance(w, h, Image.SCALE_DEFAULT); repaint(); } }
public void paint(Graphics g) { if (image != null) { g.drawImage(image, 0, 0, null); } super.paintChildren(g); super.paintBorder(g);
g.setColor(new Color(0, 0, 100, 50));
if(oldPoint != null && newPoint != null) { g.fillRect(oldPoint.x, oldPoint.y, newPoint.x - oldPoint.x, newPoint.y - oldPoint.y);
if(oldPoint.x > newPoint.x) { g.fillRect(newPoint.x, oldPoint.y, oldPoint.x - newPoint.x, newPoint.y - oldPoint.y); } if(oldPoint.y > newPoint.y) { g.fillRect(oldPoint.x, newPoint.y, newPoint.x - oldPoint.x, oldPoint.y - newPoint.y); } if(oldPoint.x > newPoint.x && oldPoint.y > newPoint.y) { g.fillRect(newPoint.x, newPoint.y, oldPoint.x - newPoint.x, oldPoint.y - newPoint.y); } } } public BufferedImage getImage() { return originalImage; } public void setImage(BufferedImage image) { this.originalImage = image; int w = this.getWidth(); int h = this.getHeight();
if ((originalImage != null) && w > 0 && h > 0) { this.image = originalImage.getScaledInstance(w, h, image.SCALE_DEFAULT); } }
public void setImageFile(File file) { try { if (file == null) { originalImage = null; }
BufferedImage bi = ImageIO.read(file); originalImage = bi; } catch (IOException ex){} repaint(); } }
|
на вот, позанимайся. найдешь ошибку - плюс дам. сразу предупреждаю - с анимироваными ГИФАМИ плохо дружит |