Probleme beim Zufügen eines JLabels

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,
ich habe eine simple Frage, die mir aber schon länger Kopfschmerzen bereitet.
Ich möchte ein einfaches JLabel einem bereits bestehendem JPanel zufügen.
Es gibt überhaupt keine Problem, wenn ich beim Konstruktor des JPanels, die folgende Codezeile einfüge.


Code:
JLabel label = new JLabel(
	      "new Label");
	        add(label);
Das Label wird wie gewünscht angezeigt. Nun möchte ich das Label aber nicht bereits bei der Konstruktion des Panels einfügen, sondern später. Ich fügte also den gleichen Code wie oben in eine Methode, die später aufgerufen wurde, ließ anschließend noch ein repaint() nachfolgen und erwartete nun das Label zu sehen. Dem ist aber nicht so.
Warum? Und was kann ich dagegen machen? Es kann eigentlich nichts Großes sein oder?
Für eine Antwort wäre ich sehr dankbar.
 
G

Gast

Gast
1) bist du dir sicher, dass sich an dieser Stelle da add() auf dein Panel bezieht? Wenn die Methode nicht zur Panelklasse gehört, wird dein Label irgendwo eingefügt.
2) Ist da vielleicht ein LayoutManager am Werk, der das Label verschluckt?
3) Füg mal invalidate() und validate() ein. Reihenfolge: invalidate() add(label) validate() repaint()
4) Zeichne mal "manuell" neu, d.h. minimiere das Anwendungsfenster und öffne es wieder, ändere durch ziehen mit der Maus die Größe, tue irgendetwas, das ein repaint erzwingt. Erscheint es dabei auch nicht, ist mit dem add irgendwas falsch
 
S

SlaterB

Gast
wahrscheinlich benötigst du einen
validate();
Aufruf, um das Layout neu berechnen zu lassen

---

je nach verwendeten Layout ist das Label aber vielleicht gar nicht zu sehen, egal wann eingefügt, etwa weil die Plätze begrenzt sind (BorderLayout),
ein komplettes Test-Programm könnte das genau klären
 
G

Guest

Gast
Danke,
mit validate() vor repaint() klappts tatsächlich, super.
 
S

SlaterB

Gast
repaint() ist evtl gar unnötig, nur validate(), das macht das schon

am sichersten ist vielleicht die ganze Palette
> invalidate() add(label) validate() repaint()

aber bei mir reicht meist validate()


falls es wer genau erklären will würde ich auch zuhören ;)
 

Templon

Bekanntes Mitglied
SlaterB hat gesagt.:
repaint() ist evtl gar unnötig, nur validate(), das macht das schon

am sichersten ist vielleicht die ganze Palette
> invalidate() add(label) validate() repaint()

aber bei mir recht meist validate()


falls es wer genau erklären will würde ich auch zuhören ;)


http://mindprod.com/jgloss/validate.html hat gesagt.:
Invoking invalidate by itself will not schedule a validate. Invoking validate by itself will not schedule a repaint. repaint does not automatically schedule a validate before the paint. If your recent layout changes (e.g. button adding/removing) are not showing up, make sure you do a validate prior to any repaint.
 
S

SlaterB

Gast
> Invoking validate by itself will not schedule a repaint

was nützt so ein Satz, wenn es doch passiert? ;)
vielleicht aus irgendwelchen anderen Gründen, weil der Button, den man gerade drückt, neugezeichnet werden muss..
 
S

SlaterB

Gast
hmm, nochmal überlegen,

ich behaupte, dass ein validate() im einfachen Falle kein repaint() danach benötigt
(hoffentlich auch korrekt erinnert, gar nicht neu getestet ;) )

dann steht in dem Satz, dass validate() nicht automatisch repaint() aufruft,

dann antworte ich, dass es doch passiert,

was könnte ich wohl meinen?!
 
S

SlaterB

Gast
ich war bisher auf keiner der Seiten, da wird meistens wenig konkretes gesagt,

habe nun zumindest
http://mindprod.com/jgloss/validate.html
gelesen, da steht aber immer noch nicht mehr zu meiner Frage, warum man den repaint()-Aufruf weglassen kann,
vertane Zeit


------

einfaches Beispiel:

Code:
public class TestGUI
    extends JFrame
{

    public TestGUI()
        throws Exception
    {
        add(new JButton("Test"), BorderLayout.NORTH);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(200, 200);
        setVisible(true);
    }

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

        Thread.sleep(2000);
        t.add(new JButton("Test 2"), BorderLayout.CENTER);
        t.validate();
    }
}

wieso ist nach 2 Sekunden der zweite Button zu sehen, obwohl kein repaint() aufgerufen wird?
das ist meine simple Frage

wenn es doch in einem der Links steht, dann entschuldige meine Ungeduld ;)
 

Templon

Bekanntes Mitglied
Aii, vllt hätte ich der Seite doch nicht glauben dürfen? =) Hab es auch gleich noch ausprobiert, brauchte wirklich kein repaint().

Ich bin vor ca 2 Monaten genau über diese Problematik gestolpert, ABER da musste ich repaint aufrufen, sonst hat es nicht geklappt. War aber eine grössere Applikation.
 

Marco13

Top Contributor
Hab' die Links auch nicht gelesen,aber irgendwann mal den Sourcecode zu diesen Methoden ein bißchen durchpflügt, und bin mir relativ (wenn auch nicht 100%) sicher, dass "validate()" zumindest dann ein repaint auslöst, wenn durch das validate die Anordnung verändert wurde. Ansatzweise(!) testen könnte man das mit einem Programm, das alle repaint-Events mitloggt, und bei dem man dann einmal
container.add(someComponent);
container.validate();
macht, und einmal nur
container.validate();
Bei ersterem wird es wohl ein repaint geben, bei letzterem vielleicht nicht.
 

Templon

Bekanntes Mitglied
@Marco, scheint zu stimmen, dass mit der Anordnung. Ich errinere mich auch wider, dass dieses Programm ein null
Layout verwendete (Ich habs nicht geschrieben! :p)

Hier noch ein Test-Programm

Code:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Test extends JFrame {
	
	JButton b = new JButton("add");
	JPanel p = new JPanel();
	int numOfLabels = 0;
	public Test() {
		setTitle("SwingTest");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(null);
		setPreferredSize(new Dimension(800,600));
		setSize(800, 600);
		b.setBounds(0, 0, 100, 25);
		add(b);
		setVisible(true);
		
		b.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				SwingUtilities.invokeLater(new Runnable() {
					public void run() {
						JLabel l = new JLabel("label");
						l.setBounds(100 + numOfLabels * 100 + 5, 0, 100, 25);
						add(l);
						validate();
						//repaint(); // uncomment me
						++numOfLabels;
					}
				});
			}
		});
	}
	

	
	public static void main(String[] args) {
		new Test();
	}
}
 
S

SlaterB

Gast
jo, das macht etwas Sinn, ist mir auch bekannt,
null = kein Layout,
in dem Fall kann das validate() übrigens wegfallen ;)
 

Templon

Bekanntes Mitglied
SlaterB hat gesagt.:
jo, das macht etwas Sinn, ist mir auch bekannt,
null = kein Layout,
in dem Fall kann das validate() übrigens wegfallen ;)

Stimmt =) EDIT: Aber ich wollte eigentlich nur zeigen, dass hier kein repaint aufgerufen wird, auch wenn man validate() ruft.

Aber wann wird dann beides gebraucht? Also validate() und repaint()? Wenn man einen Component hinzufügt wird sich ja eigentlich immer etwas am Layout ändern, und somit das repaint aufgerufen?
 
S

SlaterB

Gast
willkommen im Club der Fragenden bei dem Thema,
irgendwann wird es uns jemand erklären ;)


-------

> EDIT: Aber ich wollte eigentlich nur zeigen, dass hier kein repaint aufgerufen wird, auch wenn man validate() ruft.

was bei Fehlen des Layouts eine zu akzeptierende Ausnahme ist,
'keine Layoutänderungen -> kein repaint' ist ja auch ein sinnvoller weiterer Fall
 

Templon

Bekanntes Mitglied
SlaterB hat gesagt.:
willkommen im Club der Fragenden bei dem Thema,
irgendwann wird es uns jemand erklären ;)

Hoffentlich! =)


SlaterB hat gesagt.:
> EDIT: Aber ich wollte eigentlich nur zeigen, dass hier kein repaint aufgerufen wird, auch wenn man validate() ruft.

was bei Fehlen des Layouts eine zu akzeptierende Ausnahme ist,
'keine Layoutänderungen -> kein repaint' ist ja auch ein sinnvoller weiterer Fall

Stimmt.
 

Fu3L

Top Contributor
Bei mir hat bisher eigentlich auch immer validate() gereicht, allerdings hatte ich bei bis jetzt einem Programm mal das Problem, dass eine ScrollBar, die vorher die komplette rechte Seite hoch war und vor dem validate() verkleinert wurde, immernoch zu sehen war (allerdings ohne Funktion und die neue, kleinere ScrollBar wurde richtig angezeigt und funktionierte)....
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
J Probleme beim Array ausgeben Java Basics - Anfänger-Themen 4
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
M Erste Schritte Probleme beim Verknüpfen von Methoden Java Basics - Anfänger-Themen 15
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
A Probleme beim Methodenaufruf von char[] ! Java Basics - Anfänger-Themen 10
D JTable Probleme beim Sortieren von Zahlen. Java Basics - Anfänger-Themen 6
M OOP Probleme beim Funktionsaufruf, Java OpenCV Java Basics - Anfänger-Themen 0
X Probleme beim rekursiven Durchsuchen von Verzeichnissen Java Basics - Anfänger-Themen 1
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
A LinkedList: Probleme beim Auslesen Java Basics - Anfänger-Themen 2
F Probleme beim Übersetzen Java Basics - Anfänger-Themen 7
O Probleme beim import von Projekten in Eclipse Java Basics - Anfänger-Themen 7
C OOP Probleme beim Addieren von Arrays Java Basics - Anfänger-Themen 4
N Probleme beim entfernen eines JPanels Java Basics - Anfänger-Themen 4
J Probleme beim JRadioButton Java Basics - Anfänger-Themen 2
S Klasse properties - Probleme beim umwandeln Java Basics - Anfänger-Themen 3
M Input/Output Probleme beim Parsen von CSV und TXT Dateien Java Basics - Anfänger-Themen 7
C Probleme beim Array Java Basics - Anfänger-Themen 6
G Probleme beim HTML auslesen Java Basics - Anfänger-Themen 6
N Probleme beim Rechnen mit Integer und double Java Basics - Anfänger-Themen 4
T Probleme beim casten Java Basics - Anfänger-Themen 9
C Input/Output Probleme beim .jar erstellen Java Basics - Anfänger-Themen 5
M Klassen Probleme beim Debuggen - Datentypkonvertierung - Speichern in Datei Java Basics - Anfänger-Themen 7
W Probleme beim Wiedereinstieg Java Basics - Anfänger-Themen 25
P Interpreter-Fehler Probleme beim Ausführen einer Jar Datei Java Basics - Anfänger-Themen 2
F MVC -> Probleme beim Controller Java Basics - Anfänger-Themen 6
0 Log4J Probleme beim einlesen der Log datei Java Basics - Anfänger-Themen 2
F Probleme beim umwandeln von String in Int Java Basics - Anfänger-Themen 10
M Kontaktbuch - Probleme beim Input Java Basics - Anfänger-Themen 3
H Probleme beim erzeugen einer Headerdatei mit javah Java Basics - Anfänger-Themen 3
T Interpreter-Fehler Probleme beim .jar ausführen mit JRE 64bit Java Basics - Anfänger-Themen 9
M Probleme beim Beenden eines Threads Java Basics - Anfänger-Themen 25
A Probleme beim erstellen einer lauffähigen jar Java Basics - Anfänger-Themen 3
A Probleme beim IntervallCheck Java Basics - Anfänger-Themen 4
M Probleme beim Aufruf von Listener in anderer Klasse Java Basics - Anfänger-Themen 9
R Probleme mit NullPointer beim Mp3 abspielen (JMF) Java Basics - Anfänger-Themen 21
I Probleme beim Laden einer .gif-Datei. Java Basics - Anfänger-Themen 8
I Probleme beim Laden eins BufferedImage Java Basics - Anfänger-Themen 8
Sebi Probleme beim Kompilieren Java Basics - Anfänger-Themen 11
I Probleme beim adden von Elementen in einer ArrayList Java Basics - Anfänger-Themen 10
C Probleme beim casten und Objekt zugriff Java Basics - Anfänger-Themen 12
L Probleme beim Ausführen des Programms Java Basics - Anfänger-Themen 9
N Probleme beim abfangen von fehlern Java Basics - Anfänger-Themen 4
B kleine Probleme beim auslesen einer m3u Datei Java Basics - Anfänger-Themen 3
S Probleme beim Umwandeln von Long nach Int Java Basics - Anfänger-Themen 4
M Probleme beim Jar erstellen Java Basics - Anfänger-Themen 7
M Probleme beim Objekzugriff auf andere Klasse: NullPointerExc Java Basics - Anfänger-Themen 5
I Probleme beim Einrichten von Java (PATH-Veriable) Java Basics - Anfänger-Themen 4
A Memory Probleme beim Laden von thumbnails Java Basics - Anfänger-Themen 3
G Probleme beim Login (Webservice) Java Basics - Anfänger-Themen 4
B Probleme beim Kompilieren. Java Basics - Anfänger-Themen 12
M probleme beim parsen Java Basics - Anfänger-Themen 7
R Probleme beim Repaint Java Basics - Anfänger-Themen 3
M probleme beim applet einbinden Java Basics - Anfänger-Themen 7
L beim ersten compilen schon erste probleme Java Basics - Anfänger-Themen 8
R Probleme beim umwandeln eines String zu einem Int Wert Java Basics - Anfänger-Themen 3
M Probleme beim Datei auslesen Java Basics - Anfänger-Themen 6
M Probleme beim Compileren Java Basics - Anfänger-Themen 29
I Probleme beim ausführen des Programms Java Basics - Anfänger-Themen 6
kulturfenster Probleme beim Erstellen von Objekten Java Basics - Anfänger-Themen 15
kulturfenster Probleme beim Zeichnen einer Geraden Java Basics - Anfänger-Themen 8
S Probleme beim Java Kompilieren + ausführen Java Basics - Anfänger-Themen 6
M probleme beim kompilieren / übersetzen ! Systemeinstellung ? Java Basics - Anfänger-Themen 5
I Probleme beim Ausführen von Anwendungen Java Basics - Anfänger-Themen 2
S Probleme mit Datentyp beim Einlesen Java Basics - Anfänger-Themen 4
I java - probleme beim complimieren Java Basics - Anfänger-Themen 4
L Probleme beim ersten JavaProgramm! Java Basics - Anfänger-Themen 4
P Probleme beim Exportieren einer jar datei Java Basics - Anfänger-Themen 8
M Probleme beim Strich(e) zwichen Java Basics - Anfänger-Themen 3
M Probleme beim Drucken Java Basics - Anfänger-Themen 4
M Probleme beim Zuweisen eines Arbeitsverzeichnis Java Basics - Anfänger-Themen 2
A Probleme beim char-Vergleich! Java Basics - Anfänger-Themen 9
G Probleme beim Compilieren Java Basics - Anfänger-Themen 6
J Probleme beim Vererben Java Basics - Anfänger-Themen 2
B Probleme beim Dateien auslesen Java Basics - Anfänger-Themen 12
C Probleme beim overloaden. Java Basics - Anfänger-Themen 2
W MouseListener Probleme beim Abfangen Java Basics - Anfänger-Themen 8
X probleme beim import Java Basics - Anfänger-Themen 3
S Probleme beim Füllen einer HashMap Java Basics - Anfänger-Themen 15
K Probleme beim Einstieg Java Basics - Anfänger-Themen 2
I Probleme beim Ansprechen eines Arrays Java Basics - Anfänger-Themen 12
T Probleme beim Einlesen eines Strings Java Basics - Anfänger-Themen 3
K Neuronales Netz in Java und Probleme beim Konfigurieren Java Basics - Anfänger-Themen 2
N Probleme beim generieren von Objekten Java Basics - Anfänger-Themen 2
G Unknown Source Probleme beim Starten des Prgramms Java Basics - Anfänger-Themen 2
J probleme beim wieder aufruf Java Basics - Anfänger-Themen 2
J Probleme beim Erstellen eines Programms Java Basics - Anfänger-Themen 5
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben