Comment changer les couleurs à la peinture (Graphique)
J'ai un code pour paint dans un JPanel, mais je ne sais pas comment changer les couleurs en dehors de la méthode paint ()
Je donne le code:
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.RED);
for (Shape linea : lineas) { // dibuja todos las elipses
g2.draw(linea);
}
}
Je sais seulement changer la couleur à cette méthode en utilisant g2.setColor(Color.RED);
mais je veux la changer dans un actionListener d'un MenuItem.
1
Author: Guillaume Polet, 2013-04-18
1 answers
Ajoutez simplement une variable Color
dans votre classe et utilisez cette variable pour définir la couleur sur votre Graphics
. Il est également plus approprié de remplacer paintComponent
plutôt que paint
et l'appel de la super
-la méthode est toujours recommandé.
Voir cet exemple qui définit aléatoirement la couleur du panneau.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class TestColoredPanel {
private static class ColoredPanel extends JPanel {
private Color color = Color.RED;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(getColor());
g.fillRect(0, 0, getWidth(), getHeight());
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
repaint();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 200);
}
}
protected void initUI() {
final JFrame frame = new JFrame(TestColoredPanel.class.getSimpleName());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final ColoredPanel panel = new ColoredPanel();
frame.add(panel);
JButton button = new JButton("Click me");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Random r = new Random();
panel.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));
}
});
frame.add(button, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TestColoredPanel().initUI();
}
});
}
}
3
Author: Guillaume Polet, 2013-04-18 14:04:10