Siloze
Messages postés4Date d'inscriptionsamedi 22 juillet 2017StatutMembreDernière intervention26 juillet 2017
-
22 juil. 2017 à 20:43
Twinuts
Messages postés5374Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention 3 mars 2023
-
26 juil. 2017 à 17:37
Bonjour,
Je me suis mis en objectif de creer un logiciel pour faire des dessins, modifier des images ect...
J'ai bien avancé mais je suis à l'arret sur un probleme : Recuperer dans une autre class une variable de type Color (JColorChooser). Les Public static rende ma variable impossibl a mettre dans un g.setColor (dans les Graphics).
Et ducou j'aimerais que le boutons pour que la page de couleurs qui s'afficher soit dans la class outil (bar d'outil).
Mes codes :
public void actionPerformed (ActionEvent ev) { Object source = ev.getSource(); if(source == nv && fenetre == 1) { nom = JOptionPane.showInputDialog(null, "Entrez le nom de votre Image", "Création D'image", JOptionPane.QUESTION_MESSAGE); x2 =JOptionPane.showInputDialog(null, "Entrez la Taille x de Votre image en pixel", "Taille x", JOptionPane.QUESTION_MESSAGE); y2 =JOptionPane.showInputDialog(null, "Entrez la Taille y de Votre image en pixel", "Taille y", JOptionPane.QUESTION_MESSAGE); Fenetre fen2 = new Fenetre(); fen2.setVisible(true); outil fen3 = new outil(); fen3.setVisible(true); fenetre = 0;
}else{if(source == outil) { outil fen3 = new outil(); fen3.setVisible(true);
}else{ if(source == fe) { int quitt =JOptionPane.showConfirmDialog(null, "Etes-Vous sur de Vouloir quitter ?", "Quitter Editeur d'image", JOptionPane.YES_NO_OPTION);
public class Fenetre extends JFrame{ public static int dessin = 0;
public Fenetre(){ int x; x = Integer.parseInt(FenetreTest.x2); int y; y = Integer.parseInt(FenetreTest.y2); this.setTitle(FenetreTest.nom); this.setSize(x, y);
this.setLocationRelativeTo(null); JPanel pan = new JPanel(); getContentPane().add(pan); pan.setBackground(Color.white); this.setVisible(true); this.setResizable(false); pan.addMouseListener(new dessin (pan)); pan.addMouseMotionListener(new dessin (pan)); } private JPanel pan;
public static void main(String[] args) { // TODO Auto-generated method stub Fenetre fen2 = new Fenetre(); fen2.setVisible(true); } }
Twinuts
Messages postés5374Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention 3 mars 2023110 24 juil. 2017 à 08:29
Salut,
De base, à l'exception de certains cas, en java si tu utilises du static pour ce que tu cherches à faire, c'est qu'il y a un sérieux problème de conception (ce qui semble être le cas avec le code que tu as donné).
Autres points:
Tu récupéreras toujours la couleur du jcolorchosser qu’après son affichage, il faut que tu procèdes différemment.
Exemple définition d'une couleur en config que tu associes avec le jcolorchooser et que tu utilises indépendamment dans l'objet de dessin et naturellement le tout sans jamais utiliser de static.
Ok merci de votre réponse mais ducou je n'avais pas très bien saisie ? Comme puis-je procéder différemment vue que je voudrais que la panel de couleur s'affiche lors de l'appuis du bouton dans ma class outil. Ou alors y a t-il un autre moyen de rendre la variable global pour pouvoir la réutiliser ? Car je n'avais pas d'autres idées
Twinuts
Messages postés5374Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention 3 mars 2023110 Modifié le 25 juil. 2017 à 19:02
Salut,
Je vais essayer de faire au plus simple (donc oublie le MVC and co)
L'exemple ci dessous permet de modifier la couleur de fond de la zone de dessin de la fenetre A depuis une fenetre B.
Fichier Test.java
Ce fichier contient le main et met en relation la fenetre A et B par le biais d'une interface qui est implémentée dans la zone de dessin
import javax.swing.SwingUtilities;
public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
DrawWindow dw = new DrawWindow();
ToolWindow tw = new ToolWindow(dw);
dw.setVisible(true);
tw.setVisible(true);
});
}
}
Fichier DrawWindow.java
Ce fichier contient la zone de dessin et implémente l'interface permettant la mise à jour de la couleur de fond de la zone de dessin.
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DrawWindow extends JFrame implements DrawInterface {
private Surface surface = new Surface();
private Color surfaceBackgroundColor = Color.BLACK;
public DrawWindow() {
setSize(300, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setContentPane(surface);
}
public Color getBackgroundColor() {
return surfaceBackgroundColor;
}
public void setBackgroundColor(Color color) {
/* Mise à jour de la couleur de fond. */
surfaceBackgroundColor = color;
/* Mise à jour de la surface de dessin */
surface.repaint();
}
/*
* Surface de dessin.
*/
class Surface extends JPanel {
/*
* Methode utilisée pour dessiner.
*/
public void paintComponent(Graphics g) {
g.setColor(surfaceBackgroundColor);
g.fillRect(0, 0, getWidth(), getHeight());
}
}
}
Fichier ToolWindow.java
Ce fichier contient le bouton qui ouvrira un JColorChooser pour modifier la couleur de fond de la fenetre de dessin
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ToolWindow extends JFrame implements ActionListener {
private DrawInterface di = null;
private JButton backgroundColor = null;
public ToolWindow(DrawInterface di) {
this.di = di;
setSize(100, 200);
setLocation(10, 10);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
/* Ajout d'un bouton pour changer la couleur */
backgroundColor = new JButton();
backgroundColor.setText("Background color");
backgroundColor.addActionListener(this);
/* Ajout du composant au panel et du panel à la fenetre */
JPanel content = new JPanel();
content.add(backgroundColor);
setContentPane(content);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(backgroundColor)) {
/* Récupération de la nouvelle coleur */
Color color = JColorChooser.showDialog(this, "Select background color", di.getBackgroundColor());
/* Notification de la nouvelle couleur */
di.setBackgroundColor(color);
}
}
}
Edit:
Fichier DrawInterface.java
Interface commune aux classes DrawWindow et ToolWindow
import java.awt.Color;
public interface DrawInterface {
Color getBackgroundColor();
void setBackgroundColor(final Color color);
}
Dev addict
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
Siloze
Messages postés4Date d'inscriptionsamedi 22 juillet 2017StatutMembreDernière intervention26 juillet 2017 25 juil. 2017 à 17:39
Merci pour ta réponse (même si un code tout fait n'était pas mon nécessaire ^^) Je viens donc de essayer ton code dans un nouveau projet pour voir comment cela marche ect... Mais je tombe sur un problème : "DrawInterface cannot be resolved to a type" :c C'est assez problématique vue qu'il affecte toutes les autres class.
Twinuts
Messages postés5374Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention 3 mars 2023110
>
Siloze
Messages postés4Date d'inscriptionsamedi 22 juillet 2017StatutMembreDernière intervention26 juillet 2017 Modifié le 25 juil. 2017 à 19:01
Re,
Mince j'ai envoyé sans remarquer que j'ai omis de copier le code de l'interface...
Je viens d'éditer l'exemple de code en ajoutant celui de l'interface.
Siloze
>
Twinuts
Messages postés5374Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention 3 mars 2023 26 juil. 2017 à 00:15
Ok merci mais ton code serre bien à changer la couleur de fond. Mais pour donc changer la couleur de mon g.drawoval ça va être différent ^.^ sinon j'ai aussi appris que lorsque je fait apparaître plein de fond (pour dessiner) le g.setcolor ne serre a rien vue que cela restera noir
... J'ai recherché un peux et rien que j'arrive à comprendre. Je pourrais copier le code bêtement mais bon... Merci
Twinuts
Messages postés5374Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention 3 mars 2023110
>
Siloze
26 juil. 2017 à 08:39
Salut,
Le setColor sera toujours un setColor et ça que tu dessines un rectangle un ovale ou autre. Ici il faut *uniquement* t’arrêter sur l'utilisation de l'interface, qui, si tu en reprends le concept, te permettra de mettre en relation ta zone de dessin et ta boite à outils.
Ne le prend pas mal mais à la lecture de ce que tu dis, tu devrais faire une pause dans ton projet et revoir une partie des concepts de java2d afin de te permettre de mieux comprendre les graphiques en java.
Pour tes prochaines questions, je t’encourage à ne pas simplement dire "je ne comprends pas", mais plus de nous indiquer ce que tu ne comprends pas...
Siloze
>
Twinuts
Messages postés5374Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention 3 mars 2023 26 juil. 2017 à 10:25
Salut
J'ai bien compris ton exemple pour mettre en relation ma class outil et fenêtre jusque là pas de problème. Je disais juste que lorsque je trace un trait (Avec un MouseDragged) et un MouseMotionListener le couleurs reste noir alors que lorsque j'en créer un seul avec le MousePressed, l'oval prend bien la couleur. Bref je vais aller faire un tour sur java2d et encore merci ! :)