JButtons miteinander verbinden

riddler16

Mitglied
Servus,

ich würde gerne zwei (bzw. mehrere) Elemente (in diesem Beispiel Buttons) miteinander verbinden. Dabei soll lediglich ein Strich zwischen den Komponenten gezeichnet werden.

Hier kurz mein aktueller Stand:
//Main
Code:
package examples;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import view.Menu;

public class Gui {

    private JFrame mainFrame;

    private JPanel panel;
    private JPanel panel1;
    private JButton first;
    private JButton snd;
  
    private void displayMoveGui(){
      
        mainFrame = new JFrame("Gui");
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setJMenuBar(Menu.getInstance().getMenuBar());
        mainFrame.setSize(500, 500);
      
        panel = new TestPanel();
        first = new JButton("FIRST");
        snd = new ("SND");
      
        panel.add(first);
        panel.add(snd);
      
        mainFrame.add(panel);
        mainFrame.setLocationByPlatform(true);
        mainFrame.pack();
        mainFrame.setVisible(true);      
    }
  
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Gui().displayMoveGui();
            }
        });
    }
}

// TestPanel: Darin sind die beiden Buttons und es kann "gezeichnet" werden
Code:
package examples;
public class TestPanel extends JPanel{
  
    Point point1;
    Point point2;
    Line2D line2d;
  
    public TestPanel() {
        addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent me) {
                super.mousePressed(me);
                point1 = me.getPoint();
            }
        });
        addMouseMotionListener(new MouseAdapter() {
            @Override
            public void mouseDragged(MouseEvent me) {
                super.mouseDragged(me);
                point2 = me.getPoint();
                line2d = new Line2D.Double(point1, point2);
                repaint();
            }
        });
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;

        //Set  anti-alias!
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);

        if (point1 != null && point2 != null) {
            g2d.setPaint(Color.RED);
            g2d.setStroke(new BasicStroke(1.5f));//set stroke size
            g2d.draw(line2d);
        }
    }
}

Meine Frage lautet jetzt: Wo genau muss ich die Funktionalität des "zeichnens" einfügen bzw. wo auf die Events hören?
Ich kann ja im Frame/Panel zeichnen aber wie kann ich das so machen, dass z.B. ein Strich nur zwischen zwei JButtons möglich ist?
Muss ich dazu mir jeweils die aktuelle Position anschauen und dann entscheiden, ob es sich um ein JButton handelt?
 
Zurück