2015-09-16 2 views
0

Как мне пойти и добавить изображение в координаты мыши при щелчке мышью? Я смотрел на это: Adding Images on Mouse Click to JPanelДобавить изображение при щелчке мыши? Java applet

Но я не понимаю, и я пытаюсь добавить его на щелчок мыши в апплете

И, пожалуйста, не говорите, «Learn некоторые базовые Java первый и обеспечить! я со ссылкой на некоторые документы оракула », я просто не могу получить информацию от этих вещей.

Код:

> `import java.applet.Applet; 
    import java.awt.Graphics; 
    import java.awt.event.MouseEvent; 
    import java.awt.event.MouseListener; 
    import java.awt.image.BufferedImage; 
    import java.io.IOException; 
`import java.net.URL; 

import javax.imageio.ImageIO; 

public class SHR extends Applet implements MouseListener{ 

    int a; 
    int b; 

    @Override 
    public void mouseClicked(MouseEvent e) { 
     a = e.getX(); 
     b = e.getY(); 

     paint(null, a, b);/this is the part i am having trouble with 
    } 

    @Override 
    public void mouseEntered(MouseEvent arg0) { 

    } 

    @Override 
    public void mouseExited(MouseEvent arg0) { 

    } 

    @Override 
    public void mousePressed(MouseEvent arg0) { 

    } 

    @Override 
    public void mouseReleased(MouseEvent arg0) { 

    } 

    public void paint(Graphics g, int x, int y){ 
     BufferedImage photo = null; 
      try 
      { 
      URL u = new URL(getCodeBase(),"SilverHandRecruit.png"); 
      photo = ImageIO.read(u); 
      } 
      catch (IOException e) 
      { 
      g.drawString("Problem reading the file", 100, 100); 
      } 

      g.drawImage(photo,x, y, 10, 30, null); 
    } 



} 
` 

Проблема заключается в том, я не знаю, что я должен заменить «нуль» с, чтобы заставить его работать

Благодаря

+0

Start, взглянув на [Картина в AWT и Swing,] (http://www.oracle.com/technetwork/java/painting-140037.html), чтобы лучше понять, как картина выполняется в AWT/Swing. Есть ли причина, почему вы используете «Applet»? Учитывая тот факт, что в большинстве браузеров сейчас дни активно отключают Java/Applet, кажется, что он очень много работает с небольшим выигрышем. – MadProgrammer

+0

На самом деле, я начал пытаться сделать это с помощью swing lol. Это не сработало для меня, но я думаю, что попробую еще раз, чтобы быть осторожным. –

+0

1) Зачем нужен апплет? Если это связано с тем, что учитель указал на это, обратитесь к [Почему учителя CS должны ** останавливаться ** преподавать Java-апплеты] (http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should -stop-учебно-ява-апплеты /). 2) Зачем использовать AWT? См. [Этот ответ] (http://stackoverflow.com/questions/6255106/java-gui-listeners-without-awt/6255978#6255978) по многим причинам, чтобы отказаться от использования AWT с использованием компонентов в пользу Swing. –

ответ

1

Начните с посмотрите на Painting in AWT and Swing и Performing Custom Painting, чтобы понять, как работает живопись в AWT/Swing.

Затем посмотрите на 2D Graphics для получения более подробной информации о том, как вы можете использовать класс для рисования.

Это действительно базовый пример, который загружает одно изображение и каждый раз, когда вы нажимаете на панель, перемещает его в эту точку.

Move

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Point; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class DrawImage { 

    public static void main(String[] args) { 
     new DrawImage(); 
    } 

    public DrawImage() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private BufferedImage image; 
     private Point drawPoint; 

     public TestPane() { 
      try { 
       image = ImageIO.read(getClass().getResource("/SmallPony.png")); 
       addMouseListener(new MouseAdapter() { 

        @Override 
        public void mouseClicked(MouseEvent e) { 
         drawPoint = new Point(e.getPoint()); 
         repaint(); 
        } 

       }); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D) g.create(); 
      if (drawPoint != null) { 
       g2d.drawImage(image, drawPoint.x, drawPoint.y, this); 
      } 
      g2d.dispose(); 
     } 

    } 

} 
+0

Спасибо! Но когда я запустил его, появится эта ошибка: http: //pastebin.com/WFAD75tJ –

+0

Вам нужно будет предоставить свое собственное изображение, которое должно храниться в контексте пути к классу вашего кода (то есть в файле Jar), ​​но как вы это достигнете, будет зависеть от того, какую IDE вы используете – MadProgrammer

+0

Просто попробуйте найти нужное место, чтобы поместить его сейчас –