Cambiar color al pintar (JComponent)

Iniciado por estudianteuv, 13 Mayo 2019, 02:55 AM

0 Miembros y 1 Visitante están viendo este tema.

estudianteuv

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);
       

    }

   

}

rub'n

#1
* 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

Código (java) [Seleccionar]
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();
   }
}


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen