Как я могу рисовать линии, прямоугольники и круги в моей программе рисования Java? - PullRequest
1 голос
/ 10 февраля 2011

Я работаю над программой рисования для одного из моих классов, и я застрял. Это часть моего кода (разделена на 3 класса Java). Когда я нажимаю на кнопку «Ligne», я хочу иметь возможность нарисовать линию в белом прямоугольнике. Извините за французские комментарии.


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

Ответы [ 2 ]

1 голос
/ 10 февраля 2011

Ваш текущий код имеет проблему в том, что вы создаете новый Paint_Dessin в методе actionPerformed класса LigneListener, и хотя этот объект создается из того же класса, что и объект Paint_Dessin, который отображается в JFrame, онсовершенно другой объект и вызывающие его методы не окажут абсолютно никакого влияния на отображаемый Paint_Dessin.Что вам нужно сделать, это объявить частную переменную Paint_Dessin один раз в классе Paint_GUI, поле класса, инициализировать эту переменную либо в ее объявлении или в конструкторе Paint_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!
   }  
}  
0 голосов
/ 10 февраля 2011

Вы должны создать другой класс, например, GraphComponent, который расширяет JComponent .Вам также следует взглянуть на реализацию MouseInputListener .Я не буду давать вам решение, но это хорошее начало;).

В любом случае, я вижу, что вы француз, поэтому взгляните на site-du-zero , этополный очень хороших учебных пособий (на французском).

NB: Вы не должны называть свои классы как QUESTION, вместо этого поставьте вопрос

РЕДАКТИРОВАТЬ: здесь другие подсказки:

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 
        }
    }

и см. Форма .Вы должны реализовать другой метод из MouseInputListener, например mouseDragged, ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...