Java. Árbol genealógico. Quiero usar JButton, ActionListener y drawLine a la vez


15 de Agosto del 2017

Hola.

Hace un año hice mi árbol genealógico en Java. Pero hay un aspecto que me gustaría mejorar.

He puesto a continuación el código Java de mi árbol genealógico. Le he quitado casi todos los miembros de la familia expresamente, porque la duda que tengo no requiere el código completo. Esta versión simplificada me sirve para plantear mi pregunta.

El problema que tengo es que no consigo que me funcionen JButton, ActionListener y drawLine a la vez. Así que, cuando programé mi árbol decidí utilizar JButtons de 1 píxel de ancho para que parezcan líneas. Pero esto es muy ineficiente.

He estado intentando bastantes veces como poder crear líneas con drawLine y a la vez JButtons con un mensaje emergente cuando clico en cada botón. He buscado por Google muchas veces, pero no me sale. Siempre me falla al menos uno de los tres (JButton, ActionListener o drawLine).

En el código que viene a continuación me gustaría saber como dibujar líneas sin tener que usar JButton de un píxel de ancho. Gracias.

 

package familia;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;


public class Arbol implements ActionListener
{
JFrame f=new JFrame("Familia");

JButton Padre=new JButton("Padre");
JButton Madre=new JButton("Madre");
JButton Hijo=new JButton("Hijo");

//Quiero saber como poder dibujar las líneas sin tener que usar un JButton de un píxel de ancho:
JButton linea1=new JButton();


     public Arbol()
     {

     f.setLayout(null);
     f.getContentPane().setBackground(Color.BLACK);
     f.setVisible(true);
     f.setSize(1920,1080);
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     f.setResizable(false);


     Padre.setBounds(780,40,180,50); f.add(Padre); Padre.addActionListener(this);
     Madre.setBounds(960,40,180,50); f.add(Madre); Madre.addActionListener(this);
     Hijo.setBounds(915,400,90,50); f.add(Hijo); Hijo.addActionListener(this);


     //Quiero saber como poder dibujar las líneas sin tener que usar un JButton de un píxel de ancho:
     linea1.setBounds(960,90,1,310); f.add(linea1);

     }


    public void actionPerformed(ActionEvent e)

    {
     if(e.getSource()==Padre) JOptionPane.showMessageDialog(Padre, "Datos del padre");
     if(e.getSource()==Madre) JOptionPane.showMessageDialog(Madre, "Datos de la madre");
     if(e.getSource()==Hijo) JOptionPane.showMessageDialog(Hijo, "Datos del hijo");
    }

   public static void main (String...s) {new Arbol();}


}