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
// TestPanel: Darin sind die beiden Buttons und es kann "gezeichnet" werden
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?
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?