JLabels löschen (sollen nicht mehr gezeichnet werden)

Status
Nicht offen für weitere Antworten.

manuche

Bekanntes Mitglied
Hallo!
In meinem Spiel werden beim Mausklick an der richtige Stelle JLabels erzeugt und gezeichnet... Wenn sie nun an die falsche Stelle geschoben werden, sollen sie wieder gelöscht werden! Ich fand es einleuchtend die null-referenz zuzuweisen da es ja im Prinzip nur Instanzen sind die gelöscht werden sollen! Allerdings werden die sichtbaren Labels nicht gelöscht (auch dann nicht wenn ich den GarbageCollector direkt danach ausführe)! Hier der entsprechende Code:
Code:
private void guiMouseReleased (MouseEvent evt){
	if( hitLabel != null ){
		System.out.println ("Released: " + evt.getPoint());
       		if (contentPanel.getComponentAt (evt.getPoint()) instanceof GamePanel){
			System.out.println ("On GamePanel");
            		hitLabel.setLocation (evt.getX() - labelX, evt.getY() - labelY);
            		hitLabel.repaint();
            	}else{
            		System.out.println ("Else-Zweig");
            		backupX = hitLabel.getX();
            		backupY = hitLabel.getY();
            		String currentLabel = hitLabel.getName();
            		if (currentLabel.equals ("s1copy")){
            			s1copy = null;
	            	}else if (currentLabel.equals ("s2copy")){
        	    		s2copy = null;
            		}else if (currentLabel.equals ("s3copy")){
            			s3copy = null;
	            	}else if (currentLabel.equals ("s4copy")){
        	    		s4copy = null;
            		}else if (currentLabel.equals ("s5copy")){
            			s5copy = null;
	            	}
        	        hitLabel = null;
                	this.repaint();
            	}
        }
}
 
S

SlaterB

Gast
wenn du deine lokale Variable oder Exemplarvariable auf null setzt,
interessiert das andere Stellen, die Referenzen auf das Objekt haben, wie z.B. das JPanel in der GUI, nicht die Bohne,

auch der GC kann dann (zum Glück) nix machen, das Objekt wird an anderer Stelle noch verwendet,
du musst herausfinden, wo das Objekt in der GUI steckt und dann z.B. jPanel.remove(deletedLabel);
 

manuche

Bekanntes Mitglied
Also ich hab das ganze mal ausprobiert...
Also hinzugefügt wird es mit this.add! daraus habe ich mal gefolgert, dass es auch this.remove(xyz) heissen muss... Fehlanzeige! Auch ein contentPanel.remove.... hilft da nichts... leider?
wie kann ich denn rausfinden wo es ist?
 
S

SlaterB

Gast
ganz ordinär fängst du mit dem JContentPane an,
schaust ob es dadrin ist,
wenn nicht, dann suchst du im JContentPane rekursiv nach anderen Containern, die das gesuchte JLabel enthalten könnten,
allen voran JPanels, aber im Grunde jedes Component-Objekt

---------

das aber nur allgemeinstmöglich,
viel mehr Sinn macht es, dein Programm besser kennenzulernen,

wenn du die Objekte direkt ins ContentPane einfügst, dann müssen sie auch noch darin sein,
alles andere deutet auf Fehler oder Missdeutung hin, wie Mehrfacherzeugung, doch Unterpanel, Suche mit der falschen Variablen usw.,
beliebige Fehler denkbar, ohne Code von dir nicht weiter nachzuvollziehen

----------

aber immerhin:
nur ein remove reicht nicht, du brauchst noch repaint() und/ oder validate():
Code:
public class TestGUI
    extends JFrame
{
    JLabel a = new JLabel("test");

    public TestGUI()
        throws Exception
    {
        setLayout(new FlowLayout());

        JButton b = new JButton("Test");
        b.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    getContentPane().remove(a);
                    // validate();
                    // muss ausgeführt werden, wenn sich die Komponenten
                    // neu anordnen sollen

                    // repaint();
                    // muss ausgeführt werden damit das alte JLabel nicht
                    // mehr zu sehen ist
                }
            });

        add(a);
        add(b);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 200);
        setVisible(true);
    }

    public static void main(String[] args)
        throws Exception
    {
        new TestGUI();
    }
}
 

manuche

Bekanntes Mitglied
Hab nun mal geschaut... mit this.getComponents() hab ich mir bestätigen lassen, dass sich hier das JLabel befindet
Ein this.remove (xyz) funktioniert allerdings tortzdem nicht...
 
S

SlaterB

Gast
weitere wichtige Schritte habe ich oben gepostet,
ansonsten weißt du ja, was du zu tun hast, außer deinen aktuellen Stand 'geht nicht' zu wiederholen ;)
 
S

SlaterB

Gast
na supi, eine kleine Mini-Information, wie du wahrscheinlich im Laufe der Zeit noch viele herausrücken wirst (statt 100% klaren Code zu posten),

und dann auch noch etwas, was du mühelos selber testen könntest:

Code:
public class TestGUI
    extends JFrame
{
    JLabel a = new JLabel("test");

    public TestGUI()
        throws Exception
    {
        // setLayout(new FlowLayout());
        setLayout(null);


        JButton b = new JButton("Test");
        b.setBounds(150, 50, 100, 50);
        b.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    getContentPane().remove(a);
                    // validate();
                    // muss ausgeführt werden, wenn sich die Komponenten
                    // neu anordnen sollen

                    // repaint();
                    // muss ausgeführt werden damit das alte JLabel nicht
                    // mehr zu sehen ist
                }
            });

        a.setBounds(50, 50, 100, 50);
        add(a);
        add(b);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 200);
        setVisible(true);
    }

    public static void main(String[] args)
        throws Exception
    {
        new TestGUI();
    }
}

war das schwer?

das regt mich jetzt mal auf, so dass ich nicht weiter antworte
 

manuche

Bekanntes Mitglied
Sorry... War kein Aufruf das ganze nochmal für ein null-Layout zu posten! War nur eine vermutung, dass es was ausmachen könnte je nachdem wie ich in meinem Programm rumgefentert hab! Ein ja oder nein hätte mir eigentlich gereicht... ;)
Naja torztdem danke!
 
S

SlaterB

Gast
> Ein ja oder nein hätte mir eigentlich gereicht...

was ja niemand wirklich 100% im Kopf hat,

also entweder
1)
nicht antworten, Thread versandet, jemand wartet auf Antwort usw
2)
ich muss es testen..
3)
du machst dir dir minimale Mühe, es mit minimalen Änderungen selber zu testen

3) wolltest du nicht, 1) wollte ich nicht -> 2) + Ärger
 

manuche

Bekanntes Mitglied
Jop hast ja recht hätte ich selbst testen können... war nur zu sehr auf meinen quellcode fixiert und hab da rum gebastelt!
Mein Fehler, sorry!!!

*edit: Hier ist der komplette Quelltext des Programms... Zwar an einigen Stellen schon wieder überarbeitet, aber im großen und ganzen noch relativ der selbe! Quelltext
Ansonsten hab ichs jetzt erstmal mit setVisible (boolean b) gelöst... Nicht schön aber erfüllt seinen Zweck!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Klassen JLabels in anderen Klassen verwenden. Allgemeine Java-Themen 7
S ArrayList<JLabels> "malen" Allgemeine Java-Themen 4
M "Kopie" von JLabels werden nicht gezeichnet Allgemeine Java-Themen 10
M löschen in Rot Schwarz Bäumen Allgemeine Java-Themen 6
M lineare Sondierung löschen Allgemeine Java-Themen 2
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
E Varialbe komplett Löschen Allgemeine Java-Themen 26
O Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException? Allgemeine Java-Themen 4
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
glamdring273 Discord JDA, Kanal löschen Allgemeine Java-Themen 0
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
S Einzigartigen String in Datenbank finden und löschen Allgemeine Java-Themen 23
J Datei löschen, die Leerzeichen im Pfad hat Allgemeine Java-Themen 5
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
A Referenzen von Bildobjekten löschen Allgemeine Java-Themen 0
I PDF freigeben zum löschen Allgemeine Java-Themen 4
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
P JDK installieren Kann man die Ordner in C:\Users\*\AppData\LocalLow\Sun\Java\.... löschen? Allgemeine Java-Themen 3
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
G Datei löschen Allgemeine Java-Themen 8
R LinkedList und Threads: Strukturprobleme bez. löschen von Elementen Allgemeine Java-Themen 3
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
L Doppelte eintraege im Stringbuffer löschen Allgemeine Java-Themen 4
J Doppelte Buchstaben löschen - letztes Wort macht er nicht Allgemeine Java-Themen 2
M lucene suchen/löschen/hinzufügen Allgemeine Java-Themen 4
R Leere Verzeichnisse löschen Allgemeine Java-Themen 11
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
V System.out.println an jeder Stelle im Projekt löschen Allgemeine Java-Themen 4
M Batch zum Java Cache löschen Allgemeine Java-Themen 3
R Löschen von Files nicht möglich Allgemeine Java-Themen 11
KrokoDiehl Verzeichnisse via FileVisitor löschen Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
127.0.0.1 StringBuffer leere Zeile löschen Allgemeine Java-Themen 8
J char-Array löschen Allgemeine Java-Themen 5
W n:m Beziehung Referenzen löschen Allgemeine Java-Themen 5
127.0.0.1 Zeilen in .txt Datei löschen Allgemeine Java-Themen 11
D Löschen-Methode im Stapelverarbeitungsprogramm Allgemeine Java-Themen 4
S JTable und Spalten löschen Frage Allgemeine Java-Themen 5
EnHancEd[] ArrayList gezielt löschen Allgemeine Java-Themen 9
S Nullen aus Array löschen Allgemeine Java-Themen 10
N Java lässt sich nicht löschen! Allgemeine Java-Themen 7
U Wie kann mit einen Java Applet Dateien erstellen,verschieben und löschen? Allgemeine Java-Themen 9
P Input/Output Ordner löschen --> geht nicht Datei --> Ja Allgemeine Java-Themen 6
K Leerzeiilen aus ArrayList löschen?! Allgemeine Java-Themen 7
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
S Singleton Instanz löschen Allgemeine Java-Themen 5
Z Ausschneiden, Kopieren, Einfügen, Löschen in JTextArea Allgemeine Java-Themen 5
K Java Feld Duplikate löschen Allgemeine Java-Themen 5
F SAXBuilder blockiert löschen von Dateien Allgemeine Java-Themen 2
L Datei sicher löschen/mehrfach überschreiben? Allgemeine Java-Themen 2
S Java komplett löschen und neu installieren Allgemeine Java-Themen 4
N Java geht nicht mehr zu löschen Allgemeine Java-Themen 5
E Regex alles nach ? löschen Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
W 2D-Grafik nach getthumbnail läst sich Quellbild nicht mehr löschen Allgemeine Java-Themen 3
E Regex HTML Tag und Inhalt löschen Allgemeine Java-Themen 4
S Zeilen in einer Datei löschen Allgemeine Java-Themen 3
Z aus private List<???> list eintrag löschen Allgemeine Java-Themen 4
C Zeile aus einer CSV-Datei löschen Allgemeine Java-Themen 3
J Element aus HashSet löschen Allgemeine Java-Themen 2
S Element aus ArrayListe löschen --> Thread hängt sich auf Allgemeine Java-Themen 2
A LinkedList Auslesen und Objekt Löschen Allgemeine Java-Themen 4
G Mit Batch-Datei verzeichnisse löschen Allgemeine Java-Themen 9
K von List getSelected auf ResultSet Datenbank löschen Allgemeine Java-Themen 2
S Reihen aus einem 2-dim. Array 'löschen' Allgemeine Java-Themen 2
K Threading - schreiben auf Hashmap/löschen - ConcurrentModificationException Allgemeine Java-Themen 3
A Zeilen aus einer Textdatei löschen Allgemeine Java-Themen 6
M Arraylist - Inhalte in Textferldern anzeigen, verändern und löschen. Allgemeine Java-Themen 18
S Liste Object Löschen Allgemeine Java-Themen 7
G Log4J - Logs älter als 3 Tage löschen Allgemeine Java-Themen 5
Quaxli Files massenhaft löschen Allgemeine Java-Themen 3
J Mit POI Zeile in Excel löschen Allgemeine Java-Themen 5
D Kann Tiff Datei nicht löschen Allgemeine Java-Themen 12
0x7F800000 Regex zum löschen vom unnötigen whitespace Allgemeine Java-Themen 4
Daniel_L Best Practice zum Löschen von Log-Files? Allgemeine Java-Themen 8
S Problem beim Löschen des Inhalts des Fensters Allgemeine Java-Themen 4
O Zeile eines Textfiles löschen Allgemeine Java-Themen 2
O File zum löschen "schließen" Allgemeine Java-Themen 2
G JTree Node löschen Allgemeine Java-Themen 2
C String to hex und hex-Werte löschen Allgemeine Java-Themen 2
H Benutzerkonto löschen Allgemeine Java-Themen 4
G Dateien löschen Allgemeine Java-Themen 3
G Datei löschen nach kopieren geht nicht Allgemeine Java-Themen 5
G List- Einträge löschen Allgemeine Java-Themen 3
T probleme mit file löschen Allgemeine Java-Themen 9
F Aus einer XML Datei löschen Allgemeine Java-Themen 3
M Endgültiges Löschen von Objekten Allgemeine Java-Themen 7
H JTable Löschen [Alle Zeilen aufeinmal Löschen] Allgemeine Java-Themen 6
Z Letztes zeichen eines strings löschen Allgemeine Java-Themen 3
S Löschen von Objekt erzwingen Allgemeine Java-Themen 4
T LDAP - Eintrag löschen Allgemeine Java-Themen 6
J Alte Log Files löschen mit log4j Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben