2011-02-09 13 views
1

私は自分のクラスのペイントプログラムに取り組んでいます。これは私のコードの一部です(3つのJavaクラスに分かれています)。ボタン「Ligne」をクリックすると、白い矩形に線を描きたいと思っています。フランスのコメントには申し訳ありません。Javaペイントプログラムで線、四角形、円をどのように描くことができますか?


//cree une fenetre  
public class QUESTION 
{ 
    public static void main(String[] args) 
    { 
     Paint_GUI test2 = new Paint_GUI(); 
    } 
} 

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

//class contenant le code pour dessiner 
public class Paint_Dessin extends JPanel 
{ 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
    setBackground(Color.white); 
    g.setColor(Color.black); 
    } 

    public void TracerLigne() 
    { 
    System.out.println("LIGNE"); 
    } 
} 

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; 

    //object 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(); 
    } 
} 

答えて

0

あなたはJComponentを拡張例えばGraphComponentのような別のクラスを作成する必要があります。 MouseInputListenerの実装も見てください。私はあなたに解決策を与えませんが、それは良いスタートです;)。

とにかく、あなたはフランス語だから、site-du-zeroを見てください。非常に良いチュートリアル(フランス語)がいっぱいです。

N.B: ここにもう一つのヒント:

public class Paint_Dessin extends JComponent implements MouseInputListener{ 
    private List<Point> startPoints = new ArrayList<Point>(); 
    @Override 
    public void mouseClicked(MouseEvent e) { 
     int x = e.getX(); 
     int y = e.getY(); 
     Point p = new Point(x,y); 
     startPoints.add(p); 
     repaint(); 
    } 
    protected void paintComponent(Graphics g) { 
     g.setColor(getForeground()); 
     Graphics2D g2 = (Graphics2D) g; 
     for (Point p : startPoints) 
      p.draw(g2); 
    } 
    public class Point{ 
     private int x,y; 
     public Point(int x, int y){ 
      this.x = x; 
      this.y = y; 
     } 
     void draw(Graphics2D g2) { 
      //do the drawing with the right shape you want 
     } 
    } 

Shapeを参照してくださいあなたはあなたの質問のようにクラスに名前を付けるべきではありません、代わりに

EDITを質問を置きます。 MouseDraggedのように、MouseInputListenerから他のメソッドを実装する必要があります。

+0

高速回答のためのTy、私はクラス名を知っています:)そのコードは私のフォーラムのために本当に素早く編集します。 – Panda

+0

しかし、本当の問題は、MouseInputListenerのやり方が分からず、どこに置くべきかということです。 – Panda

1

現在のコードでは、LigneListenerクラスのactionPerformedメソッドで新しいPaint_Dessinを作成していて、このオブジェクトが作成されているJFrameに表示されるPaint_Dessinオブジェクトと同じクラスからは全く異なるオブジェクトであり、そのメソッドを呼び出すと表示されるPaint_Dessinには全く影響しません。あなたがする必要があるのは、Paint_GUIクラス、クラスフィールド内でプライベートPaint_Dessin変数を一度宣言し、この変数をその宣言またはPaint_GUIコンストラクタで初期化し、このオブジェクトをGUIに表示し、このGUI上のメソッドを呼び出すことですリスナークラス内のたとえば、

+0

ああ、はい、非常に良いコメントです:)しかし私が求めているのは、私のTracerLigne()関数を設計する方法です実際に線を引く。 Tyオブジェクトの問題のために私はそれを見たことがなかった – Panda

+0

あなたが行を描画したい場合は、それを行うことができるグラフィックスクラスのメソッドがあります。 APIをご覧ください。また、どのような白い矩形ですか?私はそれのためのコードが表示されません。そして、あなたは本当にpaintまたはpaintComponentメソッドでsetBackground(Color)を呼びたくはありません。 –

関連する問題