2016-05-23 5 views
0

Я пытаюсь нарисовать точку на кадре всякий раз, когда нажимаю на нее мышь в том же положении щелчка. Код, который я написал/скопировал, вызывает функцию рисования, но точка не нарисована, и я не могу понять проблему. Вот это код:Почему функция не выводит точку?

import static com.sun.java.accessibility.util.AWTEventMonitor.addMouseListener; 
import java.awt.image.BufferedImage; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.util.Random; 

public class MyCanvas 
{ 
    JLabel view; 
    BufferedImage surface; 

    public MyCanvas() 
    { 
     surface = new BufferedImage(600,400,BufferedImage.TYPE_INT_RGB); 
     view = new JLabel(new ImageIcon(surface)); 
     Graphics g = surface.getGraphics(); 
     g.setColor(Color.ORANGE); 
     g.fillRect(0,0,600,400); 
     //g.setColor(Color.BLACK); 
     //g.drawLine(10, 20, 350, 380); 
     g.dispose(); 

     /* 
     // RANDOM POINTS WORKING 
     ActionListener listener = new ActionListener() { 
      public void actionPerformed(ActionEvent ae) { 
       int x = random.nextInt(600); 
       int y = random.nextInt(400); 
       addNewElement(x,y); 
      } 
     }; 
     Timer timer = new Timer(200, listener); 
     timer.start(); 
     */ 
    } 

    public void addNewElement(int x,int y) { 
     Graphics g = surface.getGraphics(); 
     drawNode(x,y,g); 
     g.dispose(); 
     view.repaint(); 
    } 

    public static void main(String[] args) 
    { 
     MyCanvas canvas = new MyCanvas(); 
     JFrame frame = new JFrame(); 
     int vertexes = 0; 
     // Change this next part later to be dynamic. 
     vertexes = 10; 
     int canvasSize = vertexes * vertexes; 
     frame.setSize(canvasSize, canvasSize); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setContentPane(canvas.view); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
     frame.addMouseListener(new MouseAdapter() { 
      public void mouseClicked(MouseEvent e) { 
       //Restituisco le coordinate del click(x,y) 
       System.out.println(e.getPoint()); 
       //NOT WORKING 
       MyCanvas a = new MyCanvas(); 
       a.addNewElement(e.getPoint().x,e.getPoint().y); 
      } 
     }); 
    } 

    public void drawNode(int x, int y, Graphics g) 
    { 
      g.setColor(Color.white); 
      g.fillOval(x, y, 8, 8); 
      g.drawOval(x, y, 8, 8); 
    } 
} 
+0

Итак, вы создаете полностью ** новый ** холст 'a' на щелчками мыши; и тогда вы ничего не делаете с этим холстом. Что вы ожидаете от этого? Подсказка: рассмотрите возможность манипулирования этим экземпляром 'canvas' вместо этого ... – GhostCat

ответ

0

Снимите:

g.dispose(); 
    view.repaint(); 

Никогда не выбрасывайте объект GUI вы не создаете. Кроме того, repaint() удалит вашу точку после ее рисования, так как он вызывает paint(), который обновляет изображение. Ваша точка не обновляется, так как она не включена в paint. Также обратите внимание, что вы определяете событие мыши в кадре и применяете координаты на view.

+0

К сожалению, проблема сохраняется –

0

Хорошо, я просто выяснил проблему: я создавал новый класс при каждом нажатии. Чтобы решить эту проблему, я просто изменил

MyCanvas a = new MyCanvas(); 
a.addNewElement(e.getPoint().x,e.getPoint().y); 

в

canvas.addNewElement(e.getPoint().x,e.getPoint().y); 
Смежные вопросы