Swing Zur Laufzeit hinzegfügte Komponenten nicht sofort sichtbar?!

ElJarno

Bekanntes Mitglied
Hi Leute,
diese Problem hatte ich schon öffters bei der Änderung von der TableModel oder der JTable an sich. Es geht halt darum, dass ich zur Laufzeit durch betätigen eines Buttons oder etwas anderem ich irgendwelche Komponten einem JPanel neu hinzufügen möchte. Diese sind dann ebr nicht sofort sichtbar und erscheinen erst wenn man die Fenstergröße ändert. Wie gesagt bei TableModle konnte ich das durch die FireStrcuturChanged-Methode umgehen. JPanel bietet aber nur FirePropertyChanged an. Diese meine ich würde mir nichts bringen bzw. weiß ich dann nicht welche Werte ich dort mitgeben muss. Kann mir vlt. Jemand mal erklären woran das leigt und wie man so was generell umgeht oder behandelt.
Hier mal ein Testcode wo dieses Problem genau auftritt. Mit pack() konnte ich dieses Problem auch nicht beheben.
Java:
package schrott;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Test extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JButton jButton = null;
	private JPanel jPanel = null;

	public Test() {
		super();
		initialize();
		this.setSize(300, 200);
		this.setContentPane(jContentPane);
		this.setTitle("JFrame");
	}

	private void initialize() {
		jPanel = new JPanel();
		jPanel.setLayout(new FlowLayout());
		jButton = new JButton();
		jButton.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent e) {
				jPanel.add(new JButton("Test"));
			}
		});
		jContentPane = new JPanel();
		jContentPane.setLayout(new BorderLayout());
		jContentPane.add(jButton, BorderLayout.NORTH);
		jContentPane.add(jPanel, BorderLayout.CENTER);
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Test test = new Test();
				test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				test.setVisible(true);
			}
		});
	}
}

Gruß Jan:)
 

Foermchen82

Top Contributor
je nach dem wo du etwas geändert hast, musst du auf dem Panel oder dem Frame ein repaint() oder revalidate aufrufen (könnte auch nur validate sein). Probiers mal aus. welches es genau ist, weiß ich jetzt nicht.

Zu deinem TableModel-Problem: einfach ein FireTableStructureChanged aufrufen ist mit Kanonen auf Spatzen geschossen. Je nach dem, Ob du Daten komplett änderst, hinzufügst, oder sonst was gibt es auch die Methoden fireTableDataChanged, fireTableDataInserted, usw., Nimm lieber die. Bei deiner Methode wird die komplette Tabelle neu gezeichnet und damit gehen dir evtl auch Formatierungen und Sortierungen verloren.

Nicht zu vergessen ist, dass du einen solchen Aufruf nicht direkt machen solltest, sondern alles was Änderungen der Oberfläche bewirkt sollte in die EventQueue eingereiht werden.
 

eRaaaa

Top Contributor
Also ein pack() hätte doch zumindest den Button sichtbar machen sollen oder? (auch wenn dadurch die Größe dann komplett angepasst wären würde).
Ansonsten hilft ein
Code:
revalidate();
nach
Code:
jPanel.add(...);
 

ElJarno

Bekanntes Mitglied
Jo mit validate hats geklappt. Danke an dieser Stelle.

Nicht zu vergessen ist, dass du einen solchen Aufruf nicht direkt machen solltest, sondern alles was Änderungen der Oberfläche bewirkt sollte in die EventQueue eingereiht werden.

Wie genau funktioniert denn sowas?bzw. wie wirds gemacht.

Gruß Jan
 

eRaaaa

Top Contributor
So wie du es auch schon in deiner main getan hast:
Java:
 SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                // ...
            }
        });

oder
Code:
EventQueue.invokeXXX()

allerdings wird der Code der Listener eh auf dem EDT ausgeführt !
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
0 Ist "sequence.fallback" aus den font.properties zur Laufzeit änderbar AWT, Swing, JavaFX & SWT 0
Davee JavaFX ListView = null wenn ich sie in Laufzeit ändern will! AWT, Swing, JavaFX & SWT 16
P AWT Einzelne Komponenten zur Laufzeit austauschen? AWT, Swing, JavaFX & SWT 3
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
E Swing Layout während der Laufzeit anpassen AWT, Swing, JavaFX & SWT 3
S JavaFX ListView Inhalte während Laufzeit ändern AWT, Swing, JavaFX & SWT 23
Neumi5694 Schriftgröße zur Laufzeit AWT, Swing, JavaFX & SWT 4
D JavaFX Internationalisierung zur Laufzeit AWT, Swing, JavaFX & SWT 7
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
M JavaFX ComboBox: Update zur Laufzeit AWT, Swing, JavaFX & SWT 16
V JScrollPane im zur Laufzeit verändernden JFrame AWT, Swing, JavaFX & SWT 0
T JComponents zur Laufzeit auf JPanel darstellen AWT, Swing, JavaFX & SWT 10
M JavaFX Progressbar bar und track Komponente zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
B 3D-Grafik Java 3D Licht während Laufzeit ändern AWT, Swing, JavaFX & SWT 0
Joew0815 Dropdown meue während der Laufzeit ändern. AWT, Swing, JavaFX & SWT 6
D Swing Jlist Größe während der Laufzeit verändern. AWT, Swing, JavaFX & SWT 11
U Swing JTextField zur Laufzeit auf Eingaben prüfen AWT, Swing, JavaFX & SWT 0
M LayoutManager Layout zur Laufzeit ändern AWT, Swing, JavaFX & SWT 8
SimonRap Swing JFrame Größe zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
A Panels in JavaFX zur Laufzeit erzeugen AWT, Swing, JavaFX & SWT 5
K Panel zu Laufzeit ändern AWT, Swing, JavaFX & SWT 6
D Änderungen einer Card des CardLayouts zur Laufzeit AWT, Swing, JavaFX & SWT 6
hdi Shift Modifier zur Laufzeit ermitteln AWT, Swing, JavaFX & SWT 3
S Swing Tabelleneigenschaften zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18
S GUI per XML zur Laufzeit laden AWT, Swing, JavaFX & SWT 5
R LookAndFeel LAF zur Laufzeit umschalten AWT, Swing, JavaFX & SWT 6
darekkay Swing Komponente zur Laufzeit neuinitialisieren AWT, Swing, JavaFX & SWT 6
C Swing Toolbar zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 5
H JFrame in der Laufzeit verändern AWT, Swing, JavaFX & SWT 11
Ollek Realisierung: JTable zur Laufzeit mit neuen Daten füllen AWT, Swing, JavaFX & SWT 3
S Swing JTextArea während der Laufzeit füllen AWT, Swing, JavaFX & SWT 5
Ollek Text in JTextField und JTextArea zur Laufzeit ändern AWT, Swing, JavaFX & SWT 6
L Swing Image zur Laufzeit verändern AWT, Swing, JavaFX & SWT 6
R JFreeChart Skalierung zur Laufzeit ändern AWT, Swing, JavaFX & SWT 7
L systemtray zur laufzeit ändern AWT, Swing, JavaFX & SWT 2
N Swing Threads sollen Tabtitel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 4
F Swing Zur Laufzeit Bild laden und auf JPanel anzeigen AWT, Swing, JavaFX & SWT 4
A Komponenten zur Laufzeit entfernen AWT, Swing, JavaFX & SWT 3
B Uberschrift in Swing-Programm zur Laufzeit aendern... AWT, Swing, JavaFX & SWT 4
D Panels Dynamisch zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 2
D LayoutManager GridBagLayout, Änderung zur Laufzeit AWT, Swing, JavaFX & SWT 4
S Canvas-Inhalt in Laufzeit ändern AWT, Swing, JavaFX & SWT 6
Q 3D-Grafik Cube Farbe setzen zur Laufzeit. AWT, Swing, JavaFX & SWT 10
E Swing JList zur Laufzeit hinzugefügt elemente nicht sichtbar?! AWT, Swing, JavaFX & SWT 2
G Swing Icons von JLabel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 3
S Java3D: Alle Objekte in BranchGroup löschen während Laufzeit AWT, Swing, JavaFX & SWT 3
A Swing JLabel in Laufzeit vergrößern AWT, Swing, JavaFX & SWT 3
U JTabbedPane: Layout-Probleme bei addTab zur Laufzeit AWT, Swing, JavaFX & SWT 2
A Komponente zur Laufzeit hinzufügen und RICHTIG anzeigen AWT, Swing, JavaFX & SWT 3
G StackOverflow nach einem Tag Laufzeit AWT, Swing, JavaFX & SWT 11
F Swing JTabbedPane: Zur Laufzeit die Tabreihenfolge ändern AWT, Swing, JavaFX & SWT 2
eQuest Swing Einem JFrame zur Laufzeit ein Panel zuweisen AWT, Swing, JavaFX & SWT 5
S initialnamen einer swing instanz zur laufzeit ändern AWT, Swing, JavaFX & SWT 5
M Swing JTable während Laufzeit beschreiben AWT, Swing, JavaFX & SWT 14
multiholle [Swing] GUI zur Laufzeit ändern AWT, Swing, JavaFX & SWT 7
L GUI Komponenten zur Laufzeit entfernen AWT, Swing, JavaFX & SWT 4
A SWT - Elemente zur Laufzeit ändern AWT, Swing, JavaFX & SWT 6
N JList (JXList) ListCellRenderer zur Laufzeit ändern (Anzeigefehler) AWT, Swing, JavaFX & SWT 6
G Komponente zur Laufzeit tauschen. AWT, Swing, JavaFX & SWT 5
O Zeichnene auf ein Jpanel während der Laufzeit des Programms AWT, Swing, JavaFX & SWT 2
M Erzeugen von Komponenten während der Laufzeit AWT, Swing, JavaFX & SWT 6
T SWT/Eclipse Form Controls zur Laufzeit hinzufügen,GridLayout AWT, Swing, JavaFX & SWT 4
S Methode während ihrer Laufzeit abbrechen AWT, Swing, JavaFX & SWT 6
G Text zur Laufzeit einblenden? AWT, Swing, JavaFX & SWT 2
P SWT: Composi te zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 3
M Sprache zur Laufzeit ändern AWT, Swing, JavaFX & SWT 3
R JFrame: Inhalt zur Laufzeit ändern AWT, Swing, JavaFX & SWT 7
J GUI JPanel zur Laufzeit austauschen. AWT, Swing, JavaFX & SWT 6
DeeDee0815 LookAndFeel während der Laufzeit verstellen AWT, Swing, JavaFX & SWT 4
padde479 Look And Feel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
D Widget/Control während Laufzeit durch ein anderes ersetzen AWT, Swing, JavaFX & SWT 3
C Zeile aus Tabelle zur Laufzeit löschen AWT, Swing, JavaFX & SWT 6
C Inhalt JTextField zur Laufzeit ändern. AWT, Swing, JavaFX & SWT 14
B JButton während der Laufzeit in JLabel umwandeln AWT, Swing, JavaFX & SWT 3
P JTextArea veränder Größe während Laufzeit; GridBagLayout AWT, Swing, JavaFX & SWT 8
B JList zur Laufzeit aktualisieren AWT, Swing, JavaFX & SWT 2
R JTable: Column Titel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
D JComponets während der Laufzeit in ein Panel einfügen AWT, Swing, JavaFX & SWT 2
S Komponente zur Laufzeit hinzufügen & Vergrößern einschrä AWT, Swing, JavaFX & SWT 3
G SWT: wie aktualisiere ich ein Canvas zur Laufzeit? AWT, Swing, JavaFX & SWT 4
S Problem, neuen JInternalFrame zur Laufzeit anzuzeigen AWT, Swing, JavaFX & SWT 8
D JTable Header während Laufzeit ändern. AWT, Swing, JavaFX & SWT 3
C Dynamisches Zuweisen von Daten an eine JTable zur Laufzeit AWT, Swing, JavaFX & SWT 4
M Anzeigefehler nach langer Laufzeit der Applikation AWT, Swing, JavaFX & SWT 4
I JTextPane zur Laufzeit zeichnen AWT, Swing, JavaFX & SWT 2
G Java 1.5 Look&Feel zur Laufzeit auf 1.4 umstellen möglic AWT, Swing, JavaFX & SWT 2
F Look and Feel zur Laufzeit ändern macht Probleme AWT, Swing, JavaFX & SWT 3
G JTable zur Laufzeit Spalten und Zeilen hinzufügen AWT, Swing, JavaFX & SWT 7
M In einem JFrame Menüs & . während der Laufzeit verändern AWT, Swing, JavaFX & SWT 6
F SWT Image: Grösse des Bildes zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
D Elemente zur LaufZeit hinzufügen und löschen AWT, Swing, JavaFX & SWT 14
L Constraints während der Laufzeit verändern AWT, Swing, JavaFX & SWT 7
R setUndecorated und defaultLAF deco zur laufzeit AWT, Swing, JavaFX & SWT 2
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen


Oben