Dibujar líneas con jCheckbox

   Hace algún tiempo publique una entrada explicando como dibujar líneas en java, el ejemplo es sencillo, una clase normal que re-dibuja el método "paint" de nuestra clase para mostrar diferentes formas y tipos de líneas, pero ¿que tal si queremos hacer que las líneas se muestren dependiendo de las opciones que seleccionemos, es decir, dibujar líneas con checkboxs? bueno, entonces hacemos lo siguiente:

   Lo primero es saber que el método paint es una clase heredada, así que lo que tenemos que hacer es cambiar sus valores y re-dibujar todo, para ello creamos unas variables que son estándares, así tendremos las siguientes variables:
//Variables para el metodo "paint"
int x, y, w, h;
Color color;

   Luego de esto lo que nos resta es crear los check, combo, button o lo que vayamos a utilizar, en este ejemplo utilizare unos checkboxs, y le indicamos en el método que valores tendrá cada variable y que re-dibuje cada vez que sea seleccionada.
class MiEscucha implements ActionListener {
 public void actionPerformed(ActionEvent evt) {
  if (evt.getActionCommand().equals("Linea 1")){
   x = 50;
   y = 30;
   w = 350;
   h = 50;
   color = Color.BLACK;
   repaint();
  } else if (evt.getActionCommand().equals("Linea 2")) {
   x = 100;
   y = 30;
   w = 350;
   h = 50;
   color = Color.RED;
   repaint();
  } else if (evt.getActionCommand().equals("Linea 3")) {
   x = 150;
   y = 30;
   w = 350;
   h = 50;
   color = Color.BLUE;
   repaint();
  } else {
   JOptionPane.showMessageDialog(null,"Error interno");
  }
 }
}
   NOTA: si no sabes como crear los botones con un listener o utilizar grupos aquí un ejemplo (Los ButtonGroup).

   Entonces nuestro código final vendría siendo el siguiente:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class lineascheck extends JFrame {

 JPanel panel = new JPanel();
 ButtonGroup grupoCheck = new ButtonGroup();
  JCheckBox check1 = new JCheckBox("Linea 1");
  JCheckBox check2 = new JCheckBox("Linea 2");
  JCheckBox check3 = new JCheckBox("Linea 3");

  //Variables para el metodo "paint"
 int x, y, w, h;
 Color color;

 public lineascheck(){
  super( "Dibujo de líneas, rectángulos y óvalos" );
  setSize( 400, 165 );
  this.add(panel);
    panel.add(check1);
    panel.add(check2);
    panel.add(check3);
  grupoCheck.add(check1);
  grupoCheck.add(check2);
  grupoCheck.add(check3);
  check1.addActionListener(new MiEscucha());
  check2.addActionListener(new MiEscucha());
    check3.addActionListener(new MiEscucha());
    setLocationRelativeTo(null);
    setVisible(true);
 }

 public void paint(Graphics g){
  panel.paint(g);
  g.setColor(color);
  g.drawLine(x, y, w, h);
 }

 class MiEscucha implements ActionListener {
  public void actionPerformed(ActionEvent evt) {
   if (evt.getActionCommand().equals("Linea 1")){
    x = 50;
    y = 100;
    w = 350;
    h = 50;
    color = Color.BLACK;
    repaint();
   } else if (evt.getActionCommand().equals("Linea 2")) {
    x = 100;
    y = 110;
    w = 350;
    h = 50;
    color = Color.RED;
    repaint();
   } else if (evt.getActionCommand().equals("Linea 3")) {
    x = 150;
    y = 120;
    w = 350;
    h = 50;
    color = Color.BLUE;
    repaint();
   } else {
    JOptionPane.showMessageDialog(null,"Error interno");
   }
  }
  }

 public static void main( String args[] ){
  JFrame.setDefaultLookAndFeelDecorated(true);
  lineascheck aplicacion = new lineascheck();
  aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
 }

}

Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión EmoticonEmoticon