2014-01-21 3 views
0

Я решаю упражнение, чтобы создать ближайшую пару точек. Первый satge, который я делаю, пытается сделать точки (cricles) с помощью мыши. Но я не получил никакой реакции с левой кнопкой (всего один круг в (0,0)), остальные кнопки 2 и 3 работают нормально. Я застрял в том, почему и как это разрешить? Любой намек или помощь ценятся.Почему я не могу сделать круги с помощью мыши?

Вот код:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ClosestPairOfPoints extends JFrame { 
    // Create a canvas 
    private Circle canvas = new Circle(); 

    public ClosestPairOfPoints() { 
     // Create a panel 
     JPanel p = new JPanel(); 
     // Add canvas and panel 
     add(canvas, BorderLayout.CENTER); 
     // add(p); 

     canvas.addMouseListener(new MouseAdapter() { 
      @Override 
      // Handle mouse clicked event 
      public void mouseClicked(MouseEvent e) { 
       if (e.getButton() == MouseEvent.BUTTON1) 
        canvas.createCircle(); 
       else if (e.getButton() == MouseEvent.BUTTON2) 
        System.out.println("Try again with the left button"); 
       else if (e.getButton() == MouseEvent.BUTTON3) 
        System.out.println("Try again with the left button"); 
      } 
     }); 

    } 

    public static void main(String[] args) { 
     JFrame frame = new ClosestPairOfPoints(); 
     frame.setTitle("Closest pair of Ppoints"); 
     frame.setLocationRelativeTo(null); // Center the frame 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(400, 300); 
     frame.setVisible(true); 
    } 

    static class Circle extends JPanel { // Inner class 
     private int x; 
     private int y; 
     private int radius = 10; // Default circle radius 

     // Create a circle 
     public void createCircle() { 

     } 

     // paint the component 
     protected void paintComponent(Graphics g) { 

      super.paintComponent(g); 

      g.drawOval(x, y, radius, radius); 

     } 
    } 
} 
+2

Откуда вы знаете, что не получаете ответа от «левой кнопки»? Вам нечего сказать? – MadProgrammer

+1

Ваш метод 'createCircle()' ничего не делает. –

+0

Когда я выполняю код, я получаю круг в (0,0), и когда я нажимаю на B2 или B3, я получаю сообщение, но ничего не получаю от B1. Я застрял в том, как должен быть createCircle()? Мне нужен только намек. Я не знаю .. Просто – Kurt16

ответ

1
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ClosestPairOfPoints extends JFrame { 
// Create a canvas 
private Circle canvas = new Circle(); 

public ClosestPairOfPoints() { 
    // Add canvas and panel 
    add(canvas, BorderLayout.CENTER); 

    canvas.addMouseListener(new MouseAdapter() { 
     @Override 
     // Handle mouse clicked event 
     public void mouseClicked(MouseEvent e) { 
      if (e.getButton() == MouseEvent.BUTTON1){ 
       canvas.createCircle(e.getX(), e.getY()); 
      }else if (e.getButton() == MouseEvent.BUTTON2){ 
       System.out.println("Try again with the left button"); 
      }else if (e.getButton() == MouseEvent.BUTTON3){ 
       System.out.println("Try again with the left button"); 
      } 
     } 
    }); 

} 

public static void main(String[] args) { 
    JFrame frame = new ClosestPairOfPoints(); 
    frame.setTitle("Closest pair of Ppoints"); 
    frame.setLocationRelativeTo(null); // Center the frame 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(400, 300); 
    frame.setVisible(true); 
} 

static class Circle extends JPanel { // Inner class 
    private int x; 
    private int y; 
    private int radius = 10; // Default circle radius 

    // Create a circle 
    public void createCircle(int x, int y) { 
    this.x = x; 
    this.y = y; 
    repaint(); 
    } 

    // paint the component 
    protected void paintComponent(Graphics g) { 

     super.paintComponent(g); 

     g.drawOval(x, y, radius, radius); 

    } 
} 
} 

Теперь он должен работать. Вам нужно было вызвать createCircle и передать ему позицию mouseClick, а затем вызвать перерисовку, чтобы компонент краски можно было вызвать снова, а круг перерисовывался в правильном положении.

Ха-ха, похоже, что другой человек отправил ответ, когда я печатал его. Как упоминалось, объект события «e» содержит информацию о щелчке мыши, поэтому с помощью методов getX() и getY() вы можете получить позицию x и y щелчка мыши.

Кроме того, вам не нужен JPanel p = new JPanel(); в вашем коде либо .. потому что «холст» уже является JPanel и тем, который вы добавили в JFrame.

Надеюсь, что это поможет

+0

Это помогает ... Спасибо большое. Теперь я понимаю весь pbm и как отразить (я очень новый новичок!). – Kurt16

+0

Без проблем, это трудно быть новичком! – SonicProtein

1

Левая кнопка мыши отвечает нормально (сделал System.out.println левой кнопкой мыши), но, как на воздушной подушке Полный Угри заявил, что ваш метод createCircle() пуст. Это твоя проблема.

С точки зрения фактического рисования круга, я не буду писать весь код для вас, но я скажу вам, что и e.getY() пригодится, когда выясняется, где находится мышь при щелчке мыши.

Смежные вопросы