Auf einem JPanel gezeichnete Linie auswählen

propra

Aktives Mitglied
Hallo zusammen,

wie kann ich eine, auf einem JPanel, gezeichnete Linie auswählen bzw. testen, ob sie angeklickt wurde.
Bei anderen Symbolen, wie einem Kreis oder Rechteck, kann man ja ein Objekt vom Typ Shape "drüber legen" und dann mit der Methode
Code:
contains()
prüfen, ob die Koordinaten innerhalb der Form sind.
In der API für Line2D steht allerdings, dass die Methode hier immer false zurück liefert, weil eine Linie keine Area besitzt.
Kann ich der Linie eine Area hinzufügen? Was könnte man sonst noch machen, damit eine Linie anklickbar/auswählbar ist.
Bin für jeden Tipp dankbar.

Viele Grüße
propra
 

bERt0r

Top Contributor
Du kannst z.B abfragen ob ptLineDist(double px, double py) unter einem gewissen Wert liegt (Entfernung von Punkt zur Linie) oder mithilfe von intersects(double x, double y, double w, double h) quasi überprüfen, ob die Linie ein Rechteck von 1 Pixel rund um den geklickten Punkt kreuzt.
 

André Uhres

Top Contributor
Guckst Du hier: How to select a line :).

Gruß,
André

Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;

public class LineSelecting {

    private final JPanel panel;
    // Width and height of rectangular region around mouse
    // pointer to use for hit detection on lines
    private static final int HIT_BOX_SIZE = 2;
    private Shape[] lines = new Shape[]{
        new Line2D.Double(100, 100, 200, 200),
        new Line2D.Double(100, 150, 200, 250)};
    private int xHit, yHit;

    public LineSelecting() {
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(400, 300);
        frame.setLocationRelativeTo(null);
        panel = new JPanel() {

            @Override
            protected void paintComponent(final Graphics g) {
                super.paintComponent(g);
                Graphics2D g2 = (Graphics2D) g;
                Shape selectedLine = getClickedLine(xHit, yHit);
                for (final Shape shape : lines) {
                    if (shape == selectedLine) {
                        g2.setColor(Color.RED);
                    } else {
                        g2.setColor(Color.BLACK);
                    }
                    g2.draw(shape);
                }
            }
        };
        panel.setFocusable(true);
        frame.add(panel);
        frame.setVisible(true);
        panel.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseReleased(final MouseEvent e) {
                xHit = e.getX();
                yHit = e.getY();
                panel.repaint();
            }
        });
    }

    /**
     * Returns the first line in the collection of lines that
     * is close enough to where the user clicked, or null if
     * no such line exists
     *
     */
    public Shape getClickedLine(final int x, final int y) {
        int boxX = x - HIT_BOX_SIZE / 2;
        int boxY = y - HIT_BOX_SIZE / 2;
        int width = HIT_BOX_SIZE;
        int height = HIT_BOX_SIZE;
        for (Shape shape : lines) {
            if (shape.intersects(boxX, boxY, width, height)) {
                return shape;
            }
        }
        return null;
    }

    public static void main(final String args[]) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                LineSelecting test = new LineSelecting();
            }
        });
    }
}
 
Zuletzt bearbeitet:

propra

Aktives Mitglied
Hallo zusammen,

ich danke Euch für die Tipps.
Habe es mit intersects() und ptLineDist() ausprobiert. Hat beides funktioniert.
Ich glaube die Lösung mit ptLineDist() ist die für mich bessere, weshalb ich mich hierfür entschieden habe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
Java_RY wie kann ich auf JButtons in einem JPanel zugreifen AWT, Swing, JavaFX & SWT 3
F Zeichnung einem JPanel im Layoutmanager zuweisen AWT, Swing, JavaFX & SWT 3
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
vandread Swing Fading mit einem jPanel AWT, Swing, JavaFX & SWT 15
I Rechteck eines Graphics eines JPanels in einem anderen JPanel anzeigen AWT, Swing, JavaFX & SWT 7
Kenan89 removeAll, um alles in einem JPanel zu löschen AWT, Swing, JavaFX & SWT 10
P Problem beim erstellen eines JPanel in einem JFrame AWT, Swing, JavaFX & SWT 7
B Swing JScrollBar in einem JPanel mit FlowLayout AWT, Swing, JavaFX & SWT 15
C Animation auf einem JPanel AWT, Swing, JavaFX & SWT 3
S auf einem mit Netbeans (GUI) erstellten JPanel (eines JFrames) zeichnen? AWT, Swing, JavaFX & SWT 7
D Swing Problem mit Scrollbars in einem JPanel eines JWindows AWT, Swing, JavaFX & SWT 4
L Swing MousePosition in einem JPanel abfragen AWT, Swing, JavaFX & SWT 4
G Swing JFileChooser in einem JPanel? AWT, Swing, JavaFX & SWT 3
H Mini Map von einem JPanel AWT, Swing, JavaFX & SWT 2
W Steuerelemente und paint() in einem JPanel AWT, Swing, JavaFX & SWT 3
S JLabel in einem JPanel maximieren AWT, Swing, JavaFX & SWT 4
R JList einem vorhandenem JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
D verschieden große Componenten in einem JPanel? AWT, Swing, JavaFX & SWT 2
W Zeichnen verschiedener geom. Figuren in einem JPanel AWT, Swing, JavaFX & SWT 5
N Mehrere JTextArea in einem JPanel und eine JScrollPane AWT, Swing, JavaFX & SWT 3
A Swing: Componenten in einem deaktivierten JPanel AWT, Swing, JavaFX & SWT 2
L DOS-Rückgabe auf einem JPanel ausgeben AWT, Swing, JavaFX & SWT 5
C Probleme einem JPanel den Fokus zuzuweisen AWT, Swing, JavaFX & SWT 2
G Dynamisch Komponenten in einem JPanel bzw JFram austauschen AWT, Swing, JavaFX & SWT 7
S Dynamischer Inhalt in einem JPanel AWT, Swing, JavaFX & SWT 4
M JPanel JTable in einem JScrollPane AWT, Swing, JavaFX & SWT 6
S Zeichnen in einem JPanel AWT, Swing, JavaFX & SWT 15
B Problem bei der Erstellung einer Bilddatei aus einem JPanel AWT, Swing, JavaFX & SWT 16
M Komische Sache bei der Darstellung auf einem JPanel AWT, Swing, JavaFX & SWT 5
R JPanel eingebettet in einem JScrollPane AWT, Swing, JavaFX & SWT 3
F [Java 1.5] Shapes auf einem JPanel zoomen AWT, Swing, JavaFX & SWT 11
S Problem mit dem Zeichnen einer Linie auf einem JPanel AWT, Swing, JavaFX & SWT 30
S Transparentes JPanel auf einem JimiCanvas AWT, Swing, JavaFX & SWT 2
K Image aus einem JPanel ziehen und speichern AWT, Swing, JavaFX & SWT 2
K Zeichenfläche in einem JPanel? AWT, Swing, JavaFX & SWT 4
O Animation in einem JPanel AWT, Swing, JavaFX & SWT 2
H Punkte auf einem JPanel zeichnen AWT, Swing, JavaFX & SWT 4
S JButtons in einem JPanel erscheinen nicht direkt AWT, Swing, JavaFX & SWT 7
S Komponente auf einem JPanel ersetzen AWT, Swing, JavaFX & SWT 4
J paint(Graphics g) im BorderLayout einem JPanel zuordnen &amp AWT, Swing, JavaFX & SWT 19
O ButtonGroup einem JPanel hinzufügen?! AWT, Swing, JavaFX & SWT 4
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
S Swing zu einem Datum Tage addieren/subtrahieren AWT, Swing, JavaFX & SWT 6
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
N Nur bei einem Textfiled Nullpointerexception bei getText() AWT, Swing, JavaFX & SWT 1
H JComobox in einem JPopupNeu AWT, Swing, JavaFX & SWT 7
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
D AWT Wie kann ich ein Frame von einem anderen aus beeinflussen? AWT, Swing, JavaFX & SWT 7
T Setzen von der Schriftgröße bei einem Shell AWT, Swing, JavaFX & SWT 15
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
D JavaFX Ein Parameter von einem Stage(GUI) zu einem anderen übergeben AWT, Swing, JavaFX & SWT 6
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
S JavaFX Variablen in einem FXML File verwenden AWT, Swing, JavaFX & SWT 8
A Objekt von einem Window erstellen? AWT, Swing, JavaFX & SWT 8
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
F JavaFX Aktuelle Zeit in einem TextField anzeigen AWT, Swing, JavaFX & SWT 7
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
F JavaFX PNG aus einem resource Ordner laden AWT, Swing, JavaFX & SWT 8
F JavaFX Checken ob der Input einem festgelegten Format gleicht AWT, Swing, JavaFX & SWT 7
B JavaFX Bilder in einem Gewissen bereich halten AWT, Swing, JavaFX & SWT 1
cool_brivk24 BufferedImage einem ClickEvent hinzufügen AWT, Swing, JavaFX & SWT 13
Q-bert Doppelclick auf einem List item AWT, Swing, JavaFX & SWT 9
J JavaFX von einem Array aus Buttons herausfinden auf welcher geklickt wurde aus dem Array. AWT, Swing, JavaFX & SWT 1
C SWT autosize bei gc.drawString() auf einem Label AWT, Swing, JavaFX & SWT 7
R Farbe zu einem Eckpunkt generieren AWT, Swing, JavaFX & SWT 2
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
F abgeleitete Panels von einem ContentPanel AWT, Swing, JavaFX & SWT 4
heinz ketchup While-Schleife in einem Service für GUI AWT, Swing, JavaFX & SWT 22
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
F RGB-Werte aus einem String einlesen AWT, Swing, JavaFX & SWT 26
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
L JavaFX Mehrere JavaFX Szenen mit einem Menü AWT, Swing, JavaFX & SWT 1
L JavaFX Klickverhalten bei einem Panel AWT, Swing, JavaFX & SWT 1
V JavaFX Button Controller Fehler, trotz Erfolg in einem anderem Code? AWT, Swing, JavaFX & SWT 7
Y Darstellung und MouseHover bei bestimmten Wörtern in einem String AWT, Swing, JavaFX & SWT 2
GreenTeaYT Wie vergebe Ich den Jframe Title den Namen aus einem Element von der Arraylist ? AWT, Swing, JavaFX & SWT 4
H Geld pro Sekunde in einem Clickerspiel AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben