JComponent aus JPanel anhand Mausposition ermitteln

LatinFavourite

Bekanntes Mitglied
Moin zusammen,
ich habe in einer Anwendung ein JPanel vorliegen, welches wiederum einige JComponents beinhaltet.
Ich beabsichtige nun mithilfe eines MouseMotionListener einige davon anzuwählen. Ich stehe dabei momentan auf dem Schlauch und bei
meinen bisherigen Versuchen über die Mauskooridinaten werden alle Komponenten angewählt.


Java:
public void mouseDragged(MouseEvent e) {
        for(int i = 0; i < model.getAllComponents().size(); ++i) {
            if(model.getComponentAt(i).contains(e.getPoint())){
                // Hier werden alle Komponenten gefunden.
            }
        }
    }

Liebe Grüße und vielen Dank für jeden Tipp im Voraus.

LatinFavourite
 

LatinFavourite

Bekanntes Mitglied
Vielen Dank schon einmal. Ich habe den ersten Schritt hiermit gemacht.
Java:
if(component.getMousePosition() != null){
    //...
}
 

LatinFavourite

Bekanntes Mitglied
Das kann ich gerne machen, sobald ich es zumindest etwas zum Laufen gebracht habe.
Grundsätzlich möchte ich mit der Maus über die Komponenten im Panel fahren und von den ausgewählten Elementen den Inhalt, in diesem Fall ein Bild, weiterverwenden. Quasi die typische, rechteckige Auswahl mit der Maus.
 

mihe7

Top Contributor
Quasi die typische, rechteckige Auswahl mit der Maus.
Aha, das ist ja gleich was ganz anderes. D. h. Du hast einen Punkt p1, wenn Du die Maustaste drückst und im Drag hast Du einen Punkt p2, so dass p1,p2 ein Rechteck definieren und jetzt willst Du ermitteln, welche Komponenten sich in diesem Rechteck befinden? -> alle Komponenten, deren Bounds im Rechteck p1,p2 enthalten sind.
 

LatinFavourite

Bekanntes Mitglied
Ja genau, so meine ich es. Und die Struktur, die die Komponenten auf dem Panel hatten, also wie viele Zeilen und Spalten ausgewählt worden sind, soll beibehalten werden.
 

mihe7

Top Contributor
Also etwas wie
Java:
import java.awt.*;
import java.awt.geom.Line2D;
import java.awt.event.*;
import javax.swing.*;

import java.util.*;
import java.util.stream.*;

public class Test extends JPanel {

    private Rectangle selection;

    private MouseAdapter selectionListener = new MouseAdapter() {
        private Point start;
        @Override
        public void mousePressed(MouseEvent e) {
            start = e.getPoint();
        }

        @Override
        public void mouseDragged(MouseEvent e) {

            Point end = e.getPoint();
            selection = new Line2D.Double(start, end).getBounds();
            repaint();
        }

        @Override
        public void mouseReleased(MouseEvent e) {
            Point end = e.getPoint();
            selection = new Line2D.Double(start, end).getBounds();

            Container container = (Container) e.getSource();
            Set<Component> selected = Stream.of(container.getComponents())
                .filter(c -> selection.contains(c.getBounds()))
                .collect(Collectors.toSet());
            System.out.println(selected);

            selection = null;
            repaint();
        }
    };

    public Test() {
        setLayout(null);
        addMouseListener(selectionListener);
        addMouseMotionListener(selectionListener);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (selection != null) {
            g.setColor(new Color(127,127,127,127));
            g.fillRect(selection.x, selection.y,
                       selection.width, selection.height);
        }
    }

    public void run() {
        for (int i = 0; i < 4; i++) {
            int x = 10 + (i % 2) * 80;
            int y = 10 + (i / 2) * 80;
            int size = 50;
            JPanel p = new JPanel();
            p.setBackground(Color.green);
            add(p);
            p.setBounds(x, y, size, size);
        }

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(this);
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
 

LatinFavourite

Bekanntes Mitglied
Wollte mich zurückmelden und mich bei dir, mihe7, bedanken. Funktioniert super und kann nun darauf aufbauen. Die Sache Stream.of war mir neu und werde mich da einmal einlesen.

Danke und allen schöne Ostertage.
 

mihe7

Top Contributor
Freut mich. Dann hast Du über Ostern ja was zu tun :)

Der Stream ist nicht zwingend erforderlich, sorgt halt für kürzeren Code. Das funktioniert genauso mit einer Schleife, in der das contains abgeprüft wird und die Komponente in diesem Fall zu einer Liste hinzugefügt wird.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Swing "Drag and Drop" eines JComponent über ein JPanel AWT, Swing, JavaFX & SWT 2
P Swing Eigene Komponente Entwickeln - erben von JComponent oder JPanel? AWT, Swing, JavaFX & SWT 5
G JComponent nachträglich in JPanel einfügen AWT, Swing, JavaFX & SWT 5
ARadauer JPanel vs JComponent AWT, Swing, JavaFX & SWT 2
S JComponent u. JPanel ausdrucken AWT, Swing, JavaFX & SWT 3
S JComponent in JPanel darstellen AWT, Swing, JavaFX & SWT 2
B Batik: Inhalt JComponent to SVG? AWT, Swing, JavaFX & SWT 6
Hatsi09 JComponent anklicken und "entklicken" AWT, Swing, JavaFX & SWT 7
S Swing Schwierigkeiten mit JComponent AWT, Swing, JavaFX & SWT 4
T Swing JComponent vergrößern AWT, Swing, JavaFX & SWT 4
L JComponent und MouseMotionListener AWT, Swing, JavaFX & SWT 2
M Mouse Click Event ohne ein JComponent Objekt AWT, Swing, JavaFX & SWT 3
L Eigene JComponent in GridLayout AWT, Swing, JavaFX & SWT 9
Z JComponent's requestFocus() - Wieso nicht immer anwendbar? AWT, Swing, JavaFX & SWT 1
Z Java-Swing : JComponent AWT, Swing, JavaFX & SWT 2
W JComponent - ComponentListener - resized / moved AWT, Swing, JavaFX & SWT 5
Developer_X Wie heißt das JComponent hier? AWT, Swing, JavaFX & SWT 2
A Swing Eigene JComponent Scrollable AWT, Swing, JavaFX & SWT 6
R JComponent auf Canvas AWT, Swing, JavaFX & SWT 8
A Abgeleitete JComponent wird nicht gezeichnet AWT, Swing, JavaFX & SWT 10
A JComponent Größe AWT, Swing, JavaFX & SWT 8
T jcomponent wird nicht angezeigt AWT, Swing, JavaFX & SWT 9
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
N 2D-Grafik RTF in eigener JComponent AWT, Swing, JavaFX & SWT 2
D Swing JComponent zeichnen ohne sie zur Oberfläche hinzuzufügen AWT, Swing, JavaFX & SWT 2
P JComponent / JLabel drehen (Rotation) AWT, Swing, JavaFX & SWT 2
D JComponent erweitern AWT, Swing, JavaFX & SWT 4
1 JComponent -> java.lang.NullPointerException AWT, Swing, JavaFX & SWT 13
M 2x JComponent in einem JFrame darstellen? AWT, Swing, JavaFX & SWT 7
StupidAttack Animation, JComponent AWT, Swing, JavaFX & SWT 3
B Wechsel JTextArea und JComponent AWT, Swing, JavaFX & SWT 9
S Unterscheiden ob ein Graphics-Objekt von einer JComponent oder einem BufferedImage kommt..? AWT, Swing, JavaFX & SWT 4
H JComponent == JTextfield? AWT, Swing, JavaFX & SWT 4
C Ermitteln ob JComponent einen Listener besitzt AWT, Swing, JavaFX & SWT 2
T Eigene JComponent AWT, Swing, JavaFX & SWT 4
M Ganzen Frame mit JComponent ausfüllen AWT, Swing, JavaFX & SWT 9
M JMenu teilweise unter einer JComponent AWT, Swing, JavaFX & SWT 4
I Swing JComponent als BufferedImage speichern AWT, Swing, JavaFX & SWT 18
1 Eigene JComponent mit MouseListener versehen AWT, Swing, JavaFX & SWT 10
T JComponent nur in Swing verwendbar? AWT, Swing, JavaFX & SWT 6
M Mehrere Icons in einer JComponent AWT, Swing, JavaFX & SWT 5
Dragonfire Image von JComponent AWT, Swing, JavaFX & SWT 2
T x und y herrausfinden eines JComponent auf JFrame AWT, Swing, JavaFX & SWT 14
J absolute Position einer JComponent ermitteln AWT, Swing, JavaFX & SWT 4
B "weiches" Bewegen von einem JComponent AWT, Swing, JavaFX & SWT 18
I JDialog aus JComponent erstellen AWT, Swing, JavaFX & SWT 2
J SWT JComponent Problem AWT, Swing, JavaFX & SWT 4
T JComponent überzeichnen? AWT, Swing, JavaFX & SWT 2
G JComponent in JTable AWT, Swing, JavaFX & SWT 8
M JComponent wird in JFrame nicht angezeigt AWT, Swing, JavaFX & SWT 4
D bei Thread in JComponent malen NullPointerException AWT, Swing, JavaFX & SWT 3
S Alle EventListener einer JComponent abfragen? AWT, Swing, JavaFX & SWT 3
N JComponent#getClientProperty(key) welche Schlüssel gibt es? AWT, Swing, JavaFX & SWT 3
E Drucken von JComponent. AWT, Swing, JavaFX & SWT 4
S JComponent ersetzen AWT, Swing, JavaFX & SWT 13
R Resize Problem bei JComponent AWT, Swing, JavaFX & SWT 2
M JButton in JComponent abfragen AWT, Swing, JavaFX & SWT 6
S Mausbehandlungen für JComponent AWT, Swing, JavaFX & SWT 7
M Verschiebbare JComponent AWT, Swing, JavaFX & SWT 5
C zeichnen auf jComponent AWT, Swing, JavaFX & SWT 3
S in einem JComponent zu zeichnen AWT, Swing, JavaFX & SWT 4
G Grafik auf JComponent ohne Überschreiben von Paint-Methoden AWT, Swing, JavaFX & SWT 4
R JComponent malt seine Kinder nicht AWT, Swing, JavaFX & SWT 8
G JComponent Hintergrund AWT, Swing, JavaFX & SWT 3
M JMenu auf JComponent? AWT, Swing, JavaFX & SWT 10
G Graphics (g) und JComponent prob. AWT, Swing, JavaFX & SWT 2
G Klasse XYComponent extends JComponent AWT, Swing, JavaFX & SWT 3
P Zwei JPanel übereianderlegen AWT, Swing, JavaFX & SWT 14
XWing Basic JPanel mit 2 Buttons beutzen. AWT, Swing, JavaFX & SWT 10
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
M clear JPanel before repainting AWT, Swing, JavaFX & SWT 1
B ImageIcon auf JPanel austauschen AWT, Swing, JavaFX & SWT 3
T Swing Reload JPanel + darin liegende ProgressBar AWT, Swing, JavaFX & SWT 9
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
F JPanel Celleditor AWT, Swing, JavaFX & SWT 8
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
Ich lerne Java. Swing Von JPanel A auf JPanel B zugreifen. AWT, Swing, JavaFX & SWT 4
A JPanel austauschen und Focus geben AWT, Swing, JavaFX & SWT 3
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
J JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
B Verschiebbares JPanel "ruckelt" im Randbereich AWT, Swing, JavaFX & SWT 2
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
L JPanel zeigt keinen Inhalt AWT, Swing, JavaFX & SWT 1
dereki2000 JPanel mit Rückgbe wie bei JOptionPane AWT, Swing, JavaFX & SWT 3
E Hintergrundfarbe setzen in JPanel funktioneirt nicht AWT, Swing, JavaFX & SWT 4
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
L Swing JPanel Größe anpassen AWT, Swing, JavaFX & SWT 6
D Platzierung von JTextfield in JPanel AWT, Swing, JavaFX & SWT 3
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben