Swing Component bei Doppelklick löschen

Carcharoth

Bekanntes Mitglied
Guten Tag

Ich habe ein Fenster (extend JFrame) auf welches sich ein Element (extends JLabel) befindet.
Ich konnte bisher problemlos einen MouseListener einbauen der sich meldet wenn das Element doppelgeklickt wird.

Ich möchte, dass dieser Doppelklick dazu führt, dass das Element gelöscht wird.
Ich steh da etwas auf dem Schlauch. ich habe das Gefühl die Löschung sollte die Klasse Fenster vornehmen, aber wie soll das Element dies dem Fenster melden ?

Java:
import java.awt.Panel;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class Fenster  extends JFrame {

    Fenster() {
        super();
        setSize(500,500);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        JPanel contentPane = new JPanel();
        contentPane.setLayout(null);
        setContentPane(contentPane);
        
        Element element = new Element();
        contentPane.add(element);
        
        setVisible(true);
    }

    public static void main(String[] args) {
        Fenster meinFenster = new Fenster();
    }

}


Java:
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class Element extends JLabel {

    Element() {
        super();
        setBounds(100,100,300,200);
        setText("Ich bin ein Element.");
        
        MouseListener mouseListener = new MouseListener();
        addMouseListener(mouseListener);
    }
    
    public class MouseListener extends MouseAdapter {
        public void mouseClicked(MouseEvent e)
        {
            if (e.getClickCount() == 2) {
                JOptionPane.showMessageDialog(null, "Doppelklick !");
            }
        }
    }
}

Danke für eure Tipps.
Gruss
 

mihe7

Top Contributor
Java:
@Override
public void mouseClicked(MouseEvent e) {
    if (e.getClickCount() != 2 || !(e.getSource() instanceof Component)) {
        return;
    }

    Component comp = (Component) e.getSource();
    Container parent = comp.getParent();
    if (parent != null) {
        parent.remove(comp);
        parent.validate();
        parent.repaint();
    }
}

Wenn Du damit einen MouseListener implementierst, kannst Du die Implementierung als Top-Level-Class verwenden.
 

sascha-sphw

Top Contributor
Ich persönlich würde den Listener aber im Fenster implementieren. Da es für mich Aufgabe des Fensters ist Elemente hinzuzufügen und zu entfernen. Wenn man z.B. zum entfernen noch irgendetwas anderes machen möchte, müsste das in diesem Fall auch das Element machen und damit packt man dann Funktionalität in das Element, das dort vermutlich nicht hin gehört.
 

Carcharoth

Bekanntes Mitglied
Danke für die Tipps. Ist soweit nachvollziehbar.

Ich bin dabei denListener in die Klasse Fenster zu transferieren. Ich habe den MouseListener dem JPanel contentPane hinzugefügt.
Solange die Elemente JLabel erweitern, klappt alles gut mit dem MouseListener. Sobald der Element aber ein JTextField, ein JTextArea oder ein JTextPane erweitert, reagiert der MouseListener nur noch bei Klicks ausserhalb des Elements.

Seht Ihr eine Möglichkeit, dass der MouseListener dennoch in der Klasse Fenster implementiert werden kann (und natürlich auch innerhalb der Elemente horcht) ?

Java:
import java.awt.Panel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class Fenster  extends JFrame {

    Fenster() {
        super();
        setSize(500,500);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        JPanel contentPane = new JPanel();
        contentPane.setLayout(null);
        setContentPane(contentPane);
        
        Element element = new Element();
        contentPane.add(element);
        
        MouseListener mouseListener = new MouseListener();
        contentPane.addMouseListener(mouseListener);
        
        setVisible(true);
    }

    public static void main(String[] args) {
        Fenster meinFenster = new Fenster();
    }
    
    public class MouseListener extends MouseAdapter {
        public void mouseClicked(MouseEvent e)
        {
            System.out.println("Klick !");
        }
    }
}


Java:
import java.awt.Color;

import javax.swing.JTextField;
import javax.swing.border.LineBorder;

public class Element extends JTextField {

    Element() {
        super();
        setBounds(100,100,300,200);
        setBorder(new LineBorder(new Color(0, 0, 0)));
        setText("Ich bin ein Element.");   
    }
}
 

mihe7

Top Contributor
Es gibt zwar Workarounds, aber im Prinzip ist es schon so, dass das Ereignis von der betreffenden Komponente behandelt werden muss. Du könntest evtl. mit einer GlassPane arbeiten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Doppelklick auf Component abfangen AWT, Swing, JavaFX & SWT 5
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
R Swing Hat mein JFrame meinen Component? AWT, Swing, JavaFX & SWT 2
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
B Größe der Parent-Component dynamisch an children anpassen AWT, Swing, JavaFX & SWT 30
K JavaFX Component Größe an Inhalt anpassen AWT, Swing, JavaFX & SWT 11
M Swing Component Resize AWT, Swing, JavaFX & SWT 7
L Eigene Component anordnen AWT, Swing, JavaFX & SWT 7
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
W Swing Component mehrfach adden AWT, Swing, JavaFX & SWT 0
H Drag component out of window AWT, Swing, JavaFX & SWT 1
A remove(Component) funktioniert nicht; JTable AWT, Swing, JavaFX & SWT 4
A Swing Focus auf gemalte Component AWT, Swing, JavaFX & SWT 5
L Swing Component alignment innerhalb einer JList AWT, Swing, JavaFX & SWT 3
M AWT Drag n Drop-Support für Component AWT, Swing, JavaFX & SWT 5
M Kein resize nach Component.setVisible() AWT, Swing, JavaFX & SWT 2
Ebenius AWT Bug in Component.getLocationOnScreen() AWT, Swing, JavaFX & SWT 7
C AWT Fokus von Component entfernen, wenn kein anderes vorhanden AWT, Swing, JavaFX & SWT 4
B JTable Component mit String? AWT, Swing, JavaFX & SWT 4
M Eigenes Panel aus Component? AWT, Swing, JavaFX & SWT 5
H Component Zerren AWT, Swing, JavaFX & SWT 5
S Swing Component vertikal und hochizontal zentrieren? AWT, Swing, JavaFX & SWT 5
Z Component für File-Browser ähnliche Oberfläche AWT, Swing, JavaFX & SWT 6
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
V Swing remove(Component) blockiert Thread sehr lange. AWT, Swing, JavaFX & SWT 6
C Problem mit remove(Component comp) AWT, Swing, JavaFX & SWT 23
F AWT Component in OpenGL anzeigen? AWT, Swing, JavaFX & SWT 18
A Java Konsolen Component AWT, Swing, JavaFX & SWT 6
G Swing Component.toString() was bedeutet flags AWT, Swing, JavaFX & SWT 8
1 Eigene Component in JScrollBar + fixe Linien??? AWT, Swing, JavaFX & SWT 2
DamienX Swing Component auf mehreren Containern AWT, Swing, JavaFX & SWT 2
algorismi AWT Tranparente heavyweight component AWT, Swing, JavaFX & SWT 2
R Swing Methode add([Component]) funzt nich AWT, Swing, JavaFX & SWT 7
Developer_X AWT Component added keinen MouseListener AWT, Swing, JavaFX & SWT 7
U LayoutManager [GBL] Component aus einer Zelle löschen AWT, Swing, JavaFX & SWT 2
H Swing Illegal component position! AWT, Swing, JavaFX & SWT 2
C Flamingo Component AWT, Swing, JavaFX & SWT 2
P DragAndDrop zw Component und Container AWT, Swing, JavaFX & SWT 4
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
T Swing Component in Graphics zeichnen AWT, Swing, JavaFX & SWT 4
R Zugriff auf Component um addComponentListener() aufzurufen AWT, Swing, JavaFX & SWT 4
K AWT/SWING intern - Wie funktioniert die Component-Ermittlung AWT, Swing, JavaFX & SWT 13
S Line Component in SWING AWT, Swing, JavaFX & SWT 2
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
hdi Verständnisfrage: Container vs. Component AWT, Swing, JavaFX & SWT 3
D Eigene Component erstellen? AWT, Swing, JavaFX & SWT 4
C Syntax Highlighting Component AWT, Swing, JavaFX & SWT 2
O KeyBoardFocusManager - previous und next Component checken? AWT, Swing, JavaFX & SWT 2
A Eigene, sich selbst zeichnende Component AWT, Swing, JavaFX & SWT 5
A erneutes Öffnen jInternalFrame: illegal component position AWT, Swing, JavaFX & SWT 4
0 Component austauschen und aktualisieren ? AWT, Swing, JavaFX & SWT 6
S Thread beenden, wenn Component nicht mehr benötigt wird AWT, Swing, JavaFX & SWT 12
G "Rating Component" - Bewerten über JTable AWT, Swing, JavaFX & SWT 3
G Drag And Drop von Component (List, Tree) zum Desktop AWT, Swing, JavaFX & SWT 2
F LayoutManager und Component.setVisible(boolean) AWT, Swing, JavaFX & SWT 2
P Component ändern (repaint) AWT, Swing, JavaFX & SWT 9
F Probleme bei add(Component) JPanel > JFrame AWT, Swing, JavaFX & SWT 3
B Component AWT, Swing, JavaFX & SWT 5
L Swing Component in Buffered Image AWT, Swing, JavaFX & SWT 6
G Component "finden" AWT, Swing, JavaFX & SWT 6
H Component fokussierbar machen AWT, Swing, JavaFX & SWT 2
P Wie das Component Object des Hauptfensters ermitteln? AWT, Swing, JavaFX & SWT 4
M GridBagLayout - Component Position AWT, Swing, JavaFX & SWT 4
R Component einer Form herausbekommen AWT, Swing, JavaFX & SWT 3
T JMenu/JMenuItem Component auf der geaddet wurde AWT, Swing, JavaFX & SWT 16
B Component in JSplitPane aktualisieren AWT, Swing, JavaFX & SWT 2
G add(Component) in paintComponent erlaubt ? AWT, Swing, JavaFX & SWT 2
K Component einfügen in JPane AWT, Swing, JavaFX & SWT 5
M getSize von Component und ModelListener AWT, Swing, JavaFX & SWT 2
S Component auf Label zeichnen? AWT, Swing, JavaFX & SWT 3
R convertPointToScreen(Point p, Component c) AWT, Swing, JavaFX & SWT 5
R Component aus Container entfernen bzw. austauschen. AWT, Swing, JavaFX & SWT 6
C JPanel Component austauschen AWT, Swing, JavaFX & SWT 4
P Swing JFrame minimiert sich bei Doppelklick auf die Titel-Leiste AWT, Swing, JavaFX & SWT 16
P JFrame schrumpft bei Doppelklick auf die Titelleiste AWT, Swing, JavaFX & SWT 0
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
T JTree - Elemente mit Doppelklick auswählen AWT, Swing, JavaFX & SWT 6
C Swing Fensterresize durch doppelklick - wie die neue Grösse erhalten? AWT, Swing, JavaFX & SWT 3
TheWhiteShadow Swing JTextPanel Auswahlkriterium bei Doppelklick AWT, Swing, JavaFX & SWT 3
propra Doppelklick von Einzelklick unterscheiden, aber richtig ... AWT, Swing, JavaFX & SWT 10
J Doppelklick Event AWT, Swing, JavaFX & SWT 32
Landei Swing JTree - Element mit Doppelklick auswählen AWT, Swing, JavaFX & SWT 4
O AWT Automatischer Doppelklick AWT, Swing, JavaFX & SWT 3
T JTable: editieren bei Doppelklick deaktivieren, aber... AWT, Swing, JavaFX & SWT 2
C Swing MouseListener Doppelklick-Geschwindigkeit AWT, Swing, JavaFX & SWT 4
M Doppelklick auf JTextField AWT, Swing, JavaFX & SWT 2
KrokoDiehl Swing Optimale Spaltenbreite auf Doppelklick (JTable) AWT, Swing, JavaFX & SWT 2
G JTree und doppelklick AWT, Swing, JavaFX & SWT 4
S Auswahlfenster: Datei beim Doppelklick öffnen AWT, Swing, JavaFX & SWT 8
Go ein "JLabel" mit Doppelklick editieren. AWT, Swing, JavaFX & SWT 5
Daniel_L JTable - Links-rechts-Klick ist gleich Doppelklick? AWT, Swing, JavaFX & SWT 2
G JTable auf Doppelklick reagieren AWT, Swing, JavaFX & SWT 4
B MouseListener / doppelklick geht net AWT, Swing, JavaFX & SWT 16
F Ignoriere Mausklick falls erster Klick von Doppelklick . AWT, Swing, JavaFX & SWT 4
W MouseListener, getClickCount und Doppelklick AWT, Swing, JavaFX & SWT 6
S Bei SWT in einer Tabelle ein Event per Doppelklick auslösen? AWT, Swing, JavaFX & SWT 3
R mit SelectionListener Doppelklick? AWT, Swing, JavaFX & SWT 10
G JInternalFrame mit Doppelklick schließen möglich? AWT, Swing, JavaFX & SWT 2
R SWT-TreeViewer Doppelklick verarbeiten AWT, Swing, JavaFX & SWT 4
T JList + Doppelklick feststellen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben