2011-02-10 3 views
0

im работает над программой «paint». Пока у меня есть GUI с 1 кнопкой «Ligne» и одной панелью. в моем классе Paint_Dessin, это вызов метода TracerLigne(). этот метод рисует линию с случайным патерном. Я хочу сделать mouselistener так x1, y1 = click1 и x2, y2 = click 2. это мой код. Спасибо (извините за французский комментарий)Измените случайную линию розыгрыша здесь для розыгрыша mouseListener

//cree une fenetre 
public class QUESTION { 

    public static void main(String[] args) { 
     Paint_GUI test2 = new Paint_GUI(); 
    } 
} 

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

public class Paint_GUI extends JFrame { 
    //Panels contenant tout les bouton de mon interface 

    private JPanel panelBtn; 
    //Bar d'outil Btn 
    private JButton BtnTracerLigne; 
    //créer l'objet Paint_Dessin 
    private Paint_Dessin espaceDessin = new Paint_Dessin(); 

    public Paint_GUI() { 
     final int WINDOW_WIDTH = 650; 
     final int WINDOW_HEIGHT = 450; 

     setSize(WINDOW_WIDTH, WINDOW_HEIGHT); 
     setTitle("Paint v.2.0"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new BorderLayout()); 

     // Appeler la methode qui construit la barre de BTN. 
     buildPanelBtn(); 
     add(panelBtn, BorderLayout.NORTH); 
     add(espaceDessin, BorderLayout.CENTER); 

     // Afficher la fenetre. 
     setVisible(true); 
    } 

    private void buildPanelBtn() { 
     BtnTracerLigne = new JButton("Ligne"); 
     BtnTracerLigne.addActionListener(new LigneListener()); 

     // Creer le panel. 
     panelBtn = new JPanel(); 
     // Ajouter les composantes au label 
     panelBtn.add(BtnTracerLigne); 
    } 

    private class LigneListener implements ActionListener { 

     public void actionPerformed(ActionEvent e) { 
      espaceDessin.TracerLigne(); 
     } 
    } 
} 

import java.awt.*; 
import java.awt.geom.*; 
import javax.swing.*; 
import java.util.*; 
import java.awt.image.*; 

class Paint_Dessin extends JPanel { 

    private static final long serialVersionUID = -2110723486099015303L; 
    private static final Random RAND = new Random(); 
    private BufferedImage buffer = null; 

    @Override 
    public void paintComponent(final Graphics g) { 
     final Graphics2D g2 = (Graphics2D) g; 
     g2.clearRect(0, 0, getWidth(), getHeight()); // cleanup du composant 
     g2.drawImage(getBuffer(), null, 0, 0); 
    } 

    public void TracerLigne() { 
     final Graphics2D g2 = getBuffer().createGraphics(); 
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
       RenderingHints.VALUE_ANTIALIAS_ON); 
     g2.setColor(Color.BLACK); 
     // dessin la ligne au pif dans l'espace visible 
     final int x1 = RAND.nextInt(500); // position en X1 
     final int y1 = RAND.nextInt(500); // position en Y1 
     final int x2 = RAND.nextInt(500); // position en X2 
     final int y2 = RAND.nextInt(500); // position en Y2 
     g2.drawLine(x1, y1, x2, y2); 
     Line2D.Double line = new Line2D.Double(x1, y1, x2, y2); 
     g2.fill(line); 
     repaint(); 
    } 

    private BufferedImage getBuffer() { 
     if (buffer == null) { 
      buffer = new BufferedImage(getWidth(), getHeight(), 
        BufferedImage.TYPE_INT_ARGB); 
     } 
     return buffer; 
    } 
} 
+0

Я очистил свой вопрос. В следующий раз отправьте исходный код, отформатированный правильно. Когда вы вставляете код, выберите его в окне и нажмите кнопку кода (двоичный значок). Это будет означать четыре пробела, что приведет к тому, что страница будет отображаться как исходный код. – I82Much

ответ

1

Для этого на работу, вам нужно добавить MouseListener к вашей картине JPanel (и это может быть закодированный в одном классе, который расширяет MouseAdapter). Затем вы будете переопределять mousePressed и mouseReleased (если таковые требуются), и в этих методах получить точку мыши с точки зрения объекта MouseEvent, переданного в нее. Затем вы будете использовать значения очков для рисования строки в вашем BufferedImage. Я предполагаю, что вы захотите получить начальную точку на mousePressed и конечную точку на mouseReleased, а затем нарисовать линию в буфере после mouseReleased. Вам понадобится MouseMotionListener (опять же, класс MouseAdapter выше будет работать для этого), если вам нужно динамически рисовать строку на mouseDragged.

Заканчивать учебники для отличных примеров коды и объяснения: How To Write a MouseListener

Полупроницаемой псевдокод для этого что-то вроде:

// assuming a private inner class 
private class MyMouseAdapter extends MouseAdapter { 
    @Override 
    public void mousePressed(MouseEvent e) { 
     // get your starting point from e, the MouseEvent and store it in variable 
    } 

    @Override 
    public void mouseReleased(MouseEvent e) { 
     // get your end point from e, the MouseEvent 
     // get the Graphics object from the BufferedImage 
     // set the color 
     // set rendering hints for antialiasing if desired 
     // draw your line using the starting and end points 
     // **** dispose your graphics object **** don't forget! 
     // repaint your JPanel 
    } 
}