[Résolu][Swing] Dessiner avec la souris

Dessiner avec la souris [Résolu][Swing] - Java - Programmation

Marsh Posté le 23-03-2009 à 15:09:17    

Salut tout le monde,
j'aimerai faire en sorte que l'utilisateur puisse placer des notes sur une partition, via la souris.
 
Voici pour le moment ma classe principale :
 

Code :
  1. public class Editeur {
  2.  
  3.    static JToolBar toolBar = new JToolBar();
  4.    static JFrame frame;
  5.    static int cursorChanged = 0; // blanche = 1, noire = 2
  6.  
  7.    public static void main(String[] args) {
  8.        frame = new JFrame("Editeur de Partitions Musicales" );
  9.        frame.setSize(800, 600);
  10.        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  11.        frame.setLocationRelativeTo(null);
  12.        frame.setJMenuBar(new MenuBar());
  13.        frame.setVisible(true);
  14.        frame.addMouseListener(new MouseListener(frame));
  15.  
  16.        // Création de la toolbar
  17.        frame.getContentPane().add(toolBar, BorderLayout.NORTH);
  18.        toolBar.setFloatable(false);
  19.        addButtons();
  20.  
  21.        // Affichage de la partition
  22.        DrawPartition partition = new DrawPartition();
  23.        frame.getContentPane().add(partition, BorderLayout.CENTER);
  24.        partition.setBackground(Color.white);
  25.        
  26.    }
  27.  
  28.    static protected void addButtons() {
  29.        Icon blancheImg = new ImageIcon("src/blanche.gif" );
  30.        JButton blanche = new JButton("Blanche", blancheImg);
  31.        blanche.addActionListener(new ChangeCursor());
  32.        toolBar.add(blanche);
  33.        Icon noireImg = new ImageIcon("src/noire.gif" );
  34.        JButton noire = new JButton("Noire", noireImg);
  35.        noire.addActionListener(new ChangeCursor());
  36.        toolBar.add(noire);
  37.    }
  38.  
  39.    static class ChangeCursor implements ActionListener {
  40.  
  41.        public void actionPerformed(ActionEvent e) {
  42.            Image image = null;
  43.            Toolkit toolkit = Toolkit.getDefaultToolkit();
  44.  
  45.            if (e.getActionCommand().equals("Blanche" )) {
  46.                image = toolkit.getImage("src/curseur_blanche.gif" );
  47.                cursorChanged = 1;
  48.            } else {
  49.                image = toolkit.getImage("src/curseur_noire.gif" );
  50.                cursorChanged = 2;
  51.            }
  52.            Cursor cursor = toolkit.createCustomCursor(
  53.                    image, new Point(26, 27), "img" );
  54.            frame.setCursor(cursor);
  55.        }
  56.    }
  57.  
  58.    static class MouseListener extends MouseAdapter {
  59.        
  60.        public MouseListener(JFrame pan) {
  61.        }
  62.  
  63.        public void mouseClicked(MouseEvent e) {
  64.  
  65.            if (e.getButton() == MouseEvent.BUTTON3) {
  66.                /* Si une note est séléctionnée et qu'un clic droit est
  67.                effectué, on revient au curseur par défaut */
  68.                if (cursorChanged != 0) {
  69.                    Cursor cursor = new Cursor(Cursor.DEFAULT_CURSOR);
  70.                    frame.setCursor(cursor);
  71.                }
  72.            }
  73.            // Gestion du clic gauche
  74.            if (e.getButton() == MouseEvent.BUTTON1) {
  75.                // Si le curseur a changé, on place la note
  76.                if (cursorChanged != 0) {
  77.                }
  78.            }
  79.        }
  80.    }
  81. }


 
En gros, si l'utilisateur clique sur un des deux boutons, le curseur prend l'apparence de la note sélectionné, puis si l'utilisateur fait un clique gauche et que la note est sélectionnée, on place la note sur la partition.
 
Le problème, c'est que je ne sais pas comment dessiner sur mon panel sur ma partition.
Bêtement, il suffit de faire un g.drawImage, mais je ne vois pas comment récupérer le contexte de la partition pour que la classe MouseListener puisse s'en servir.
 
Merci :jap:

Message cité 1 fois
Message édité par koskoz le 28-03-2009 à 16:58:44

---------------
Twitter
Reply

Marsh Posté le 23-03-2009 à 15:09:17   

Reply

Marsh Posté le 26-03-2009 à 20:53:37    

Personne ? :(


---------------
Twitter
Reply

Marsh Posté le 27-03-2009 à 16:40:53    

koskoz a écrit :

mais je ne vois pas comment récupérer le contexte de la partition pour que la classe MouseListener puisse s'en servir.


 
Pas bien compris. En passant ta partition au constructeur du listener ça marche pas ?

Reply

Marsh Posté le 28-03-2009 à 16:43:36    

Effectivement, je passe le panel au constructeur du listener, et ensuite je fais ça pour dessiner dessus :
Graphics g = pan.getGraphics();
 
Et ca fonctionne :jap:


---------------
Twitter
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed