2011-02-10 11 views
0

imは、「ペイント」プログラムで作業しています。今のところ、私は1つのボタン "Ligne"と1つの描画可能なパネルを持つGUIを持っています。私のクラスPaint_Dessinでは、メソッド呼び出しTracerLigne()を呼び出します。この方法では、無作為なpaternをフォローする。私は何をしたいですかmouselistenerので、x1、y1 = click1とx2、y2 = 2をクリックします。これは私のコードです。あなたの絵画のJPanelにするMouseListenerを追加する必要があります(これはすることができ、これが機能する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

:これを行うためのHow To Write a MouseListener

半擬似コードのようなものです。次回は、正しい形式のソースコードを投稿してください。コードを貼り付けるときは、ウィンドウでコードを選択し、コードボタン(バイナリアイコン)を押します。それは4つのスペースをインデントし、ページをソースコードとしてレンダリングします。 – I82Much

答えて

1

(フランスのコメントを申し訳ありません)ありがとうMouseAdapterを継承する単一のクラスでコード化されています)。次に、mousePressedとmouseReleased(これらのメソッドが必要な場合)をオーバーライドし、それらのメソッドで渡されたMouseEventオブジェクトからマウスの位置Pointを取得します。次に、Pointsの値を使用して、BufferedImageに線を描画します。私の推測では、mouseReleasedの開始点とmouseReleasedの終点を取得してから、mouseReleasedの後にバッファに行を描画したいと考えています。 mouseDraggedで線を動的に描画する必要がある場合は、MouseMotionListenerが必要です(上記のMouseAdapterクラスも同様です)。

は、優れたサンプルコードと説明のためのチュートリアルをチェックアウト:私はあなたの質問をクリーンアップ

// 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 
    } 
} 
関連する問題