2011-02-09 121 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

你應該創建另一個類像GraphComponent例如,擴展JComponent。你也應該看看執行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。您應該實現MouseInputListener中的其他方法,如mouseDragged,...

+0

Ty爲快速答案,我知道的類名:)它的一部分我的代碼我編輯真的很快的論壇。 – Panda 2011-02-09 22:58:05

+0

但真正的問題是,不知道如何做MouseInputListener,我應該把它放在 – Panda 2011-02-09 22:58:48

1

您當前的代碼有問題,因爲您正在LigneListener類的actionPerformed方法中創建一個新的Paint_Dessin,並且在創建此對象時從與JFrame中顯示的Paint_Dessin對象相同的類,它是一個完全不同的對象,調用它的方法對顯示的Paint_Dessin絕對沒有影響。您需要做的是在Paint_GUI類中聲明一個私有的Paint_Dessin變量,一個類字段,在其聲明或Paint_GUI構造函數中初始化此變量,然後在GUI中顯示此對象,並在此GUI上調用方法在監聽器類中。

public class Paint_GUI extends JFrame 
{ 
    private JPanel panelBtn; 
    private JButton BtnTracerLigne; 
    private Paint_Dessin espaceDessin = new Paint_Dessin(); 

    public Paint_GUI() 
    { 
     final int WINDOW_WIDTH = 650; 
     //... code deleted for sake of brevity 

     // Paint_Dessin espaceDessin = new Paint_Dessin(); 
     add(espaceDessin, BorderLayout.CENTER); 

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

private void buildPanelBtn() 
{ 
    // .... 
} 

private class LigneListener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
    // Paint_Dessin tracerLigne = new Paint_Dessin(); 
    // tracerLigne.TracerLigne(); 
    espaceDessin.TracerLigne(); // call the method on the same object! 
    } 
}