Changer la couleur de la forme de dessin spécifique lorsque je clique dessus AWT
mawan1
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
mawan1 Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
mawan1 Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
Bonjour, J'ai ce code, et je veux y ajouter la fonctionnalité pour changer la couleur de la seule forme sur laquelle je clique, les autres formes restent à l'écran avec la même couleur, toute suggestion sera appréciée.
Merci d'avance.
Merci d'avance.
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Frame; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.swing.JButton; public class TestGraphic { public static void main(String[] args) { new TestGraphic(); } public TestGraphic(){ EventQueue.invokeLater(new Runnable(){ @Override public void run(){ Frame frame = new Frame(); frame.add(new Composants()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); frame.addWindowListener((WindowListener) new WindowAdapter(){ @Override public void windowClosing(WindowEvent windowEvent) { System.exit(0); } }); } }); } public class Composants extends Container { private Color color = Color.BLACK; private List<Color> avaliableColors = new ArrayList<>(16); private Shape face; public Composants(){ setLayout(new BorderLayout()); Area area = new Area(); area.add(new Area(new Ellipse2D.Double(108, 110, 200, 200))); area.add(new Area(new Ellipse2D.Double(160, 150, 20, 20))); area.add(new Area(new Ellipse2D.Double(240, 150, 20, 20))); area.add(new Area(new Rectangle2D.Double(160, 220, 100, 40))); face = area; avaliableColors.add(Color.BLACK); avaliableColors.add(Color.BLUE); avaliableColors.add(Color.CYAN); avaliableColors.add(Color.DARK_GRAY); avaliableColors.add(Color.GRAY); avaliableColors.add(Color.GREEN); avaliableColors.add(Color.LIGHT_GRAY); avaliableColors.add(Color.MAGENTA); avaliableColors.add(Color.ORANGE); avaliableColors.add(Color.PINK); avaliableColors.add(Color.RED); avaliableColors.add(Color.WHITE); avaliableColors.add(Color.YELLOW); JButton btn = new JButton("Change color"); btn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { changeColor(); } }); add(btn, BorderLayout.SOUTH); addMouseListener(new MouseAdapter(){ @Override public void mouseClicked(MouseEvent e) { if (face.contains(e.getPoint())) { changeColor(); } } }); } protected void changeColor(){ // Randomise the colors Collections.shuffle(avaliableColors); color = avaliableColors.get(0); repaint(); } @Override public Dimension getPreferredSize(){ return new Dimension(600, 400); } public void close(){ addComponentListener((ComponentListener) new WindowAdapter(){ @Override public void windowClosing(WindowEvent windowEvent) { System.exit(0); } }); } @Override public void paint(Graphics gui) { super.paint(gui); Graphics2D g2d = (Graphics2D) gui.create(); g2d.setColor(color); g2d.drawOval(108, 110, 200, 200); g2d.drawOval(160, 150, 20, 20); g2d.drawOval(240, 150, 20, 20); g2d.drawRect(160, 220, 100, 40); g2d.dispose(); } } }
A voir également:
- Changer la couleur de la forme de dessin spécifique lorsque je clique dessus AWT
- Changer dns - Guide
- Changer la couleur de la barre des taches - Guide
- Mise en forme conditionnelle excel couleur - Guide
- Changer de carte graphique - Guide
- Comment changer la couleur de whatsapp - Accueil - Messagerie instantanée
2 réponses
Bonjour,
Tu peux y arriver assez facilement à condition d'avoir un Container qui contient plusieurs Component, chacun étant responsable du dessin d'une seule forme, avec sa couleur propre.
Exemple :
Tu peux y arriver assez facilement à condition d'avoir un Container qui contient plusieurs Component, chacun étant responsable du dessin d'une seule forme, avec sa couleur propre.
Exemple :
import java.awt.*; import java.awt.event.*; import java.awt.geom.*; public class DessinFrame { public static void main(String... args) { Frame frame = new Frame(); frame.setSize(600, 400); frame.setLocationRelativeTo(null); frame.add(new DessinContainer( new Ellipse2D.Double(108, 110, 200, 200), new Ellipse2D.Double(160, 150, 20, 20), new Ellipse2D.Double(240, 150, 20, 20), new Rectangle2D.Double(160, 220, 100, 40))); frame.setVisible(true); frame.addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e) { frame.dispose(); } }); } } class DessinContainer extends Container { private static final long serialVersionUID = 1L; private static final Color[] availableColors = { Color.BLACK, Color.BLUE, Color.CYAN, Color.DARK_GRAY, Color.GRAY, Color.GREEN, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.WHITE, Color.YELLOW }; private final DessinComponent[] components; public DessinContainer(Shape... shapes) { setLayout(null); setLocation(0, 0); setSize(Short.MAX_VALUE, Short.MAX_VALUE); components = new DessinComponent[shapes.length]; for (int i = 0; i < shapes.length; i++) { components[i] = new DessinComponent(shapes[i], availableColors[0]); add(components[i]); } addMouseListener(new MouseAdapter(){ @Override public void mouseClicked(MouseEvent e) { for (DessinComponent component : components) { if (component.contains(e.getPoint())) { Color randomColor = availableColors[(int) (Math.random() * availableColors.length)]; component.setColor(randomColor); } } } }); } } class DessinComponent extends Component { private static final long serialVersionUID = 1L; private Shape shape; private Color color; public DessinComponent(Shape shape, Color color) { this.shape = shape; this.color = color; setLocation(0, 0); setSize(Short.MAX_VALUE, Short.MAX_VALUE); } public void setColor(Color color) { this.color = color; repaint(); } @Override public boolean contains(Point point) { return shape.contains(point); } @Override public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setColor(color); g2.draw(shape); } }
Merci pour votre aide ! SVP une dernière demande, je voulais aussi realiser un code permettant de construire des lignes, des cercles et des rectangles.
j'ai ajouter droplist avec "Rectangle", "Ligne" et "Cercle" et je veux que lorsque je clique sur un de ces boutons et qu'ensuite sur un autre bouton DrawComponent, la figure de l'un de ces types est affichée à l'endroit où vous venez de cliquer.
le code que j'ai fait :
Si vous pouvez svp le modifier pour affichée la figure à l'endroit où vous venez de cliquer.
j'ai ajouter droplist avec "Rectangle", "Ligne" et "Cercle" et je veux que lorsque je clique sur un de ces boutons et qu'ensuite sur un autre bouton DrawComponent, la figure de l'un de ces types est affichée à l'endroit où vous venez de cliquer.
le code que j'ai fait :
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Dialogue {
public static void main(String[] args) {
new Dialogue();
}
public Dialogue(){
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
JFrame frame = new JFrame();
frame.add(new Panel(Color.RED));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.addWindowListener((WindowListener) new WindowAdapter(){
@Override
public void windowClosing(WindowEvent windowEvent) {
System.exit(0);
}
});
}
});
}
public class Panel extends JPanel implements ActionListener,MouseListener {
private String shapeName;
private int x=10,y=20;
private int shape;
private Color color;
public Panel(Color color) {
//super(new BorderLayout());
this.color = color;
String[] petStrings = { "Cercle", "Rectangle", "Ligne" };
//Create the combo box, select the item at index 4.
//Indices start at 0, so 4 specifies the pig.
JComboBox petList = new JComboBox(petStrings);
petList.setSelectedIndex(2);
petList.addActionListener(this);
//Lay out the demo.
add(petList);
this.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e) {
int currentX = e.getX();
int currentY = e.getY();
System.out.print("am mouse clicked");
if(shapeName.equals("Ligne")) {
shape = 1;
}
else if(shapeName.equals("Rectangle")) {
shape = 2;
}
else if(shapeName.equals("Cercle")) {
shape = 3;
}
repaint();
}
});
}
public void paint(Graphics gui) {
super.paint(gui);
Graphics2D g2d = (Graphics2D) gui.create();
g2d.setColor(color);
System.out.print("am Paint method");
if(shape == 1)
g2d.drawLine(x, y, x+20,y+30);
if(shape == 2)
g2d.drawRect(x,y,30,50);
if(shape == 3)
g2d.drawOval(x,y,30,30);
g2d.dispose();
}
/** Listens to the combo box. */
public void actionPerformed(ActionEvent e) {
System.out.print("am action listener");
JComboBox cb = (JComboBox)e.getSource();
shapeName = (String)cb.getSelectedItem();
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
}
}
Si vous pouvez svp le modifier pour affichée la figure à l'endroit où vous venez de cliquer.