Sinceramente soy malo en JAVA. Tengo una duda, ¿cómo podría cambiar de color a la hora de pintar en el canvas? Algo así como una paleta de colores. No sé como se podría hacer, ayuda!
package com.mycompany.mavenproject3;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class NewClass extends JComponent {
private Point inicioArrastre;
private Point finArrastre;
private ArrayList<Shape> lineas = new ArrayList<Shape>();
public NewClass() {
super();
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) { // cuando se presiona el mouse
inicioArrastre = new Point(e.getX(), e.getY());
repaint();
}
public void mouseReleased(MouseEvent e) { // cuando se deja de presionar el mouse
finArrastre = new Point(e.getX(), e.getY());
Shape linea = crearLinea(inicioArrastre.x, inicioArrastre.y, finArrastre.x, finArrastre.y);
lineas.add(linea);
repaint();
}
});
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) { // cuando se esta arrastrando el mouse
finArrastre = new Point(e.getX(), e.getY());
Shape linea = crearLinea(inicioArrastre.x, inicioArrastre.y, finArrastre.x, finArrastre.y);
lineas.add(linea);
inicioArrastre = new Point(finArrastre.x, finArrastre.y);
repaint();
}
});
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.BLUE);
for (Shape linea : lineas) { // dibuja todos las elipses
g2.draw(linea);
}
}
private Line2D.Float crearLinea(int x1, int y1, int x2, int y2) {
return new Line2D.Float(x1, y1, x2, y2);
}
public static void main(String[] a3d) {
JFrame ventana = new JFrame("Dibujar");
ventana.setSize(800, 800);
ventana.setLocationRelativeTo(null);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ventana.add(new NewClass());
ventana.setVisible(true);
}
}
* Linea 30 a 32, contiene el listener del JButton para abrir la paleta y obtener el color
* Linea 64 se le setea el color obtenido al metodo g2.setColor(Color c)
Acostumbrate a usar GeShi
package com.mycompany.mavenproject3;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import javax.swing.*;
/*
* @author
*/
public class NewClass extends JComponent {
private Point inicioArrastre;
private Point finArrastre;
private final ArrayList<Shape> lineas = new ArrayList<>();
private static JButton jButton = new JButton("Paleta de colores");
private Color color;
public NewClass() {
super();
/**
* Listener del boton para abrir la paleta de colores
*/
jButton.addActionListener(e -> {
this.color = JColorChooser.showDialog(null,"",Color.LIGHT_GRAY);
});
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) { // cuando se presiona el mouse
inicioArrastre = new Point(e.getX(), e.getY());
repaint();
}
public void mouseReleased(MouseEvent e) { // cuando se deja de presionar el mouse
finArrastre = new Point(e.getX(), e.getY());
Shape linea = crearLinea(inicioArrastre.x, inicioArrastre.y, finArrastre.x, finArrastre.y);
lineas.add(linea);
repaint();
}
});
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) { // cuando se esta arrastrando el mouse
finArrastre = new Point(e.getX(), e.getY());
Shape linea = crearLinea(inicioArrastre.x, inicioArrastre.y, finArrastre.x, finArrastre.y);
lineas.add(linea);
inicioArrastre = new Point(finArrastre.x, finArrastre.y);
repaint();
}
});
}
@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(this.color);
for (Shape linea : lineas) { // dibuja todos las elipses
g2.draw(linea);
}
}
private Line2D.Float crearLinea(int x1, int y1, int x2, int y2) {
return new Line2D.Float(x1, y1, x2, y2);
}
public static void main(String[] a3d) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
ex.printStackTrace();
}
new Thread(() -> {
final JFrame ventana = new JFrame("Dibujar");
final JPanel jPanel = new JPanel();
jPanel.setLayout(new BoxLayout(jPanel,BoxLayout.Y_AXIS));
jPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
ventana.setSize(800, 800);
ventana.setLocationRelativeTo(null);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panelBoton = new JPanel();
panelBoton.setLayout(new BoxLayout(panelBoton,BoxLayout.X_AXIS));
jButton.setContentAreaFilled(false);
panelBoton.add(jButton,BorderLayout.EAST);
jPanel.add(panelBoton,BorderLayout.NORTH);
jPanel.add(Box.createVerticalStrut(20));
jPanel.add(new NewClass());
ventana.add(jPanel);
ventana.setVisible(true);
}).start();
}
}