tonyanick
Messages postés8Date d'inscriptionsamedi 14 mars 2015StatutMembreDernière intervention22 septembre 2021
-
Modifié par Whismeril le 17/04/2015 à 06:41
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023
-
17 avril 2015 à 11:32
Salut les zéros, j'essaie de faire une petite appli qui permet de dessiner avec la souris dans un fenêtre JFrame. En essayant de faire ca, j'ai deux souci que je trouve bizarre et que j'arrive pas à resoudre!
De un, j'ai un décalage entre l'endroit ou je presse le bouton de la souris et l'endroit ou je vois le trait que je veux tracer apparaître (étrange n'est ce pas!!?)
De deux, dans ma JFrame j'ai deux JPanel, un pour dessiner au centre et l'autre au nord, comme gestionnaire de positionnement j'utilise un borderlayout, donc mon jpanel dans lequel je veux dessiner est centré mais j'arrive pas à ne pas sortir les trace de ma souris qui deborde toujours en suivant mes mouvements sur toute la fenêtre. Svp aidez moi please je cale net sur ça! Voici mon code :
private int x1, int y1; private JPanel milieu = new JPanel();
private JMenuBar jmb = new JMenuBar(); private JMenu affichage = new JMenu("Affichage"); private JMenu aide = new JMenu("Aide?"); private JMenu couleur = new JMenu("Couleur"); private JMenu forme = new JMenu("Forme");
private JMenuItem carre = new JMenuItem("Carré"); private JMenuItem rond = new JMenuItem("Rond"); private JMenuItem effacer = new JMenuItem("Effacer"); private JMenuItem texteAide = new JMenuItem("Texte d'aide"); private JMenuItem boiteAide = new JMenuItem("Fenêtre d'aide"); private JMenuItem rouge = new JMenuItem("rouge"); private JMenuItem bleu = new JMenuItem("bleu"); private JMenuItem vert = new JMenuItem("vert"); private JMenuItem jaune = new JMenuItem("jaune"); private JMenuItem gris = new JMenuItem("gris"); private JMenuItem orange = new JMenuItem("orange"); private JMenuItem violet = new JMenuItem("violet"); private JMenuItem noir = new JMenuItem("noir"); private JMenuItem blanc = new JMenuItem("blanc");
private JToolBar barreOutil = new JToolBar(); private JButton boutonRouge = new JButton(""); private JButton boutonBleu = new JButton(""); private JButton boutonVert = new JButton(""); private JButton boutonJaune = new JButton(""); private JButton boutonGris = new JButton(""); private JButton boutonOrange = new JButton(""); private JButton boutonViolet = new JButton(""); private JButton boutonNoir = new JButton(""); private JButton boutonBlanc = new JButton(""); protected Fenetre() { this.setTitle("Boite à dessin"); this.setSize(430, 430); this.setLocationRelativeTo(null); this.setResizable(false); this.setLayout(new BorderLayout(1,1));
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 17 avril 2015 à 11:32
Salut,
Avant de commencer tu dessines dans la fenêtre et non dans ton panel du centre... de plus tu as placé tes listeners de souris dans la fenêtre du coup la position x/y du curseur est relative à la fenêtre et non ton panel.
Ci-dessous un exemple de dessin avec la mouse:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Fenetre extends JFrame implements ActionListener {
private WhiteBoard whiteBoard = null;
protected Fenetre() {
setTitle("Boite à dessin");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(430, 430);
setLocationRelativeTo(null);
// setLayout(new BorderLayout(1, 1)); // Implicite, Le contentPane d'une
// JFrame est déjà en BorderLayout
final JButton btClear = new JButton("Clear");
btClear.addActionListener(this);
final JPanel pnorth = new JPanel();
pnorth.add(btClear);
getContentPane().add(pnorth, BorderLayout.NORTH);
whiteBoard = new WhiteBoard();
getContentPane().add(whiteBoard, BorderLayout.CENTER);
}
public static void main(final String[] args) {
new Fenetre().setVisible(true);
}
@Override
public void actionPerformed(final ActionEvent e) {
whiteBoard.clear();
}
private class WhiteBoard extends JPanel implements MouseListener,
MouseMotionListener {
private Point curr = null;
private Point prev = null;
public WhiteBoard() {
addMouseListener(this);
addMouseMotionListener(this);
setOpaque(true);;
}
public void clear() {
getGraphics().clearRect(0, 0, getWidth(), getHeight());
}
@Override
public void mouseDragged(final MouseEvent e) {
prev=curr;
curr=e.getPoint();
final Graphics g = getGraphics();
g.setColor(Color.RED);
g.drawLine(prev.x,prev.y,curr.x,curr.y);
}
@Override
public void mouseMoved(final MouseEvent e) { }
@Override
public void mouseClicked(final MouseEvent e) { }
@Override
public void mouseEntered(final MouseEvent e) { }
@Override
public void mouseExited(final MouseEvent e) { }
@Override
public void mousePressed(final MouseEvent e) {
curr = e.getPoint();
}
@Override
public void mouseReleased(final MouseEvent e) {
prev=curr=null;
}
}
}