Foro de elhacker.net

Programación => Java => Mensaje iniciado por: estudianteuv en 13 Mayo 2019, 02:55 am



Título: Cambiar color al pintar (JComponent)
Publicado por: estudianteuv en 13 Mayo 2019, 02:55 am
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!

Código:
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);
       

    }

   

}


Título: Re: Cambiar color al pintar (JComponent)
Publicado por: rub'n en 15 Mayo 2019, 00:48 am
* 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
  1. package com.mycompany.mavenproject3;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.MouseAdapter;
  5. import java.awt.event.MouseEvent;
  6. import java.awt.event.MouseMotionAdapter;
  7. import java.awt.geom.Line2D;
  8. import java.util.ArrayList;
  9. import javax.swing.*;
  10.  
  11.  
  12. /*
  13.  * @author
  14.  */
  15. public class NewClass extends JComponent  {
  16.  
  17.    private Point inicioArrastre;
  18.    private Point finArrastre;
  19.    private final ArrayList<Shape> lineas = new ArrayList<>();
  20.    private static JButton jButton = new JButton("Paleta de colores");
  21.    private Color color;
  22.  
  23.  
  24.    public NewClass() {
  25.        super();
  26.  
  27.        /**
  28.          * Listener del boton para abrir la paleta de colores
  29.          */
  30.        jButton.addActionListener(e -> {
  31.            this.color = JColorChooser.showDialog(null,"",Color.LIGHT_GRAY);
  32.        });
  33.  
  34.        addMouseListener(new MouseAdapter() {
  35.  
  36.            public void mousePressed(MouseEvent e) { // cuando se presiona el mouse
  37.                inicioArrastre = new Point(e.getX(), e.getY());
  38.                repaint();
  39.            }
  40.  
  41.            public void mouseReleased(MouseEvent e) { // cuando se deja de presionar el mouse
  42.                finArrastre = new Point(e.getX(), e.getY());
  43.                Shape linea = crearLinea(inicioArrastre.x, inicioArrastre.y, finArrastre.x, finArrastre.y);
  44.                lineas.add(linea);
  45.                repaint();
  46.            }
  47.        });
  48.        addMouseMotionListener(new MouseMotionAdapter() {
  49.  
  50.            public void mouseDragged(MouseEvent e) { // cuando se esta arrastrando el mouse
  51.                finArrastre = new Point(e.getX(), e.getY());
  52.                Shape linea = crearLinea(inicioArrastre.x, inicioArrastre.y, finArrastre.x, finArrastre.y);
  53.                lineas.add(linea);
  54.                inicioArrastre = new Point(finArrastre.x, finArrastre.y);
  55.                repaint();
  56.            }
  57.        });
  58.  
  59.    }
  60.  
  61.    @Override
  62.    public void paint(Graphics g) {
  63.        Graphics2D g2 = (Graphics2D) g;
  64.        g2.setColor(this.color);
  65.        for (Shape linea : lineas) { // dibuja todos las elipses
  66.            g2.draw(linea);
  67.        }
  68.    }
  69.  
  70.    private Line2D.Float crearLinea(int x1, int y1, int x2, int y2) {
  71.        return new Line2D.Float(x1, y1, x2, y2);
  72.    }
  73.  
  74.    public static void main(String[] a3d) {
  75.  
  76.        try {
  77.            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  78.        } catch (Exception ex) {
  79.            ex.printStackTrace();
  80.        }
  81.        new Thread(() -> {
  82.            final JFrame ventana = new JFrame("Dibujar");
  83.            final JPanel jPanel = new JPanel();
  84.            jPanel.setLayout(new BoxLayout(jPanel,BoxLayout.Y_AXIS));
  85.            jPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
  86.            ventana.setSize(800, 800);
  87.            ventana.setLocationRelativeTo(null);
  88.            ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  89.  
  90.            final JPanel panelBoton = new JPanel();
  91.            panelBoton.setLayout(new BoxLayout(panelBoton,BoxLayout.X_AXIS));
  92.            jButton.setContentAreaFilled(false);
  93.  
  94.            panelBoton.add(jButton,BorderLayout.EAST);
  95.            jPanel.add(panelBoton,BorderLayout.NORTH);
  96.            jPanel.add(Box.createVerticalStrut(20));
  97.            jPanel.add(new NewClass());
  98.            ventana.add(jPanel);
  99.            ventana.setVisible(true);
  100.        }).start();
  101.    }
  102. }