TableLayout - dynamische Elemente zu spät ge-updated

Status
Nicht offen für weitere Antworten.

Krabat

Bekanntes Mitglied
Ich benutze bei diesem Beispielprogramm das TableLayout und habe drei statische JButtons und einen dynamischen, der zusammen mit einer JTextArea in einem JPanel steckt. Klickt man den dynamischen Button soll die JTextArea eingeblendet werden und der Rest dadrunter dementsprechend verschoben werden. Dies passiert allerdings erst verzögert, nachdem man die Größe des gesamten JFrame verändert hat, also wenn die Elemente sowieso alle neu ausgerichtet werden müssen.
Im TableLayout Tutorial steht es müsse...
pane.invalidate();
pane.validate();

...aufgerufen werden, aber ich scheine noch etwas zu übersehen. Habe meinen Beispielcode angehängt.


Code:
package layout;

import info.clearthought.layout.TableLayout;

import java.awt.Color;
import java.awt.Container;
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.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.WindowConstants;

public class MainFrame extends JFrame {

	
	private JPanel plDyn = null;
	
	
	public static void main(String[] args) {
		new MainFrame();
	}
	
	public MainFrame() {
		super("TableLayout test");
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		
//		Tries to set the default system Look&Feel.
		try {
			UIManager.setLookAndFeel(
					UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {
			System.err.println("Look&Feel nicht unterstützt. "+e.getMessage());
		}
		
		Container pane = getContentPane();
		pane.add(packMainPanel());
		pane.setPreferredSize(new Dimension(100, 300));
		pack();
		setVisible(true);
	}
	
	private JPanel packMainPanel() {
		JButton btOne = new JButton("one");
		JButton btTwo = new JButton("two");
		JButton btThree = new JButton("three");
		
		double pref = TableLayout.PREFERRED;
		double fill = TableLayout.FILL;
		double[][] size = {{fill}, 
							{pref, pref, pref, pref, fill}};
		TableLayout layout = new TableLayout(size);
		
		JPanel pane = new JPanel();
		pane.setLayout(layout);
		pane.add(btOne,					"0, 0");
		pane.add(btTwo, 				"0, 1");
		pane.add(packDynamicPanel(),	"0, 2");
		pane.add(btThree, 				"0, 3");
		//added empty fill-space here?
		return pane;
	}
	
	
	private JPanel packDynamicPanel() {
		JButton btDyn = new JButton("dynamic");
		btDyn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				toggleDyn(plDyn);
			}
		});
		
		String[] s = {"eins", "zwei", "drei", 
				"eins", "zwei", "drei", 
				"eins", "zwei", "drei", 
				"eins", "zwei", "drei"};
		JList lst = new JList(s);
		JScrollPane scroll = new JScrollPane(lst);
		scroll.setPreferredSize(lst.getPreferredScrollableViewportSize());
		
		double pref = TableLayout.PREFERRED;
		double fill = TableLayout.FILL;
		double[][] size = {{fill}, 
							{pref, 0}};
		TableLayout layout = new TableLayout(size);
		plDyn = new JPanel();
		plDyn.setLayout(layout);
		plDyn.setBackground(Color.RED);
		plDyn.add(btDyn,	"0, 0");
		plDyn.add(scroll,	"0, 1");
		return plDyn;
	}
	
	
	private void toggleDyn(JPanel pane) {
		TableLayout layout = (TableLayout)pane.getLayout();
		if (layout.getRow(1) == 0) {
			layout.setRow(1, TableLayout.FILL);
		} else {
			layout.setRow(1, 0);
		}
		pane.invalidate();
		pane.validate();
	}

}
 
R

Residuen

Gast
Hi,

eine Möglichkeit wäre zum Beispiel, indem du

pane.invalidate();
pane.validate();


gegen die Zeilen

pane.setVisible(false);
pane.setVisible(true);


tauscht. Nicht besonders edel, aber funktioniert.

Gruß
Residuen
 
R

Residuen

Gast
Die Edelvariante wäre natürlich, einfach

pane.revalidate();

zu nehmen!

gruß
Residuen[/b]
 

Krabat

Bekanntes Mitglied
Residuen hat gesagt.:
pane.revalidate();

... funktioniert super! Vielen Dank. Meine invalidate()/validate() Vorgehensweise scheint auch ein wenig veraltet zu sein, da es sich um AWT Component Methoden handelt, während revalidate eine Swing Methode von JComponent ist und aktuelle (Swing?-)Programme (laut API doc) das AWT validate wohl nicht mehr aufrufen müßten.
Hmm... das einzige, was mich noch verwundert ist, daß es mit der alten Variante durchaus bereits mal funktionierte. :bahnhof:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M TableLayout: JComboBox zerstört alles... AWT, Swing, JavaFX & SWT 10
D LayoutManager TableLayout AWT, Swing, JavaFX & SWT 6
N LayoutManager TableLayout ohne IDE AWT, Swing, JavaFX & SWT 2
Y Swing Aktualisieren eines JPanel mit ArrayList im TableLayout AWT, Swing, JavaFX & SWT 2
S AWT TableLayout - FILL/FILL oder 0.5/0.5 AWT, Swing, JavaFX & SWT 7
Yuen TableLayout verwenden / Classpath AWT, Swing, JavaFX & SWT 3
I TableLayout Probleme AWT, Swing, JavaFX & SWT 11
S TableLayout installieren AWT, Swing, JavaFX & SWT 5
G TableLayout und Buttongrösse AWT, Swing, JavaFX & SWT 3
D Konstruktor von TableLayout AWT, Swing, JavaFX & SWT 8
B TableLayout - Resize Probleme AWT, Swing, JavaFX & SWT 2
R TableLayout AWT, Swing, JavaFX & SWT 3
M TableLayout & Swing ? AWT, Swing, JavaFX & SWT 5
M TableLayout - Habt ihr erfahrungen? AWT, Swing, JavaFX & SWT 5
B Dynamische ListView-Größe, die bei Fenstergrößenänderung sich anpasst AWT, Swing, JavaFX & SWT 19
M Dynamische Zellengröße und Zeilenumbruch AWT, Swing, JavaFX & SWT 7
M Java FX dynamische Diagramme AWT, Swing, JavaFX & SWT 0
Q-bert Dynamische Komponente erzeugen AWT, Swing, JavaFX & SWT 6
4a61766120617274697374 dynamische Tree View AWT, Swing, JavaFX & SWT 2
P JavaFX Dynamische TableView AWT, Swing, JavaFX & SWT 14
G Dynamische ComboBox AWT, Swing, JavaFX & SWT 3
B Swing Dynamische JList mit Bildern AWT, Swing, JavaFX & SWT 4
S Jtable dynamische Spaltenbreite AWT, Swing, JavaFX & SWT 5
B SWT Dynamische GUI (Layoutmanager?) AWT, Swing, JavaFX & SWT 2
P Dynamische Seite zum basteln für den User AWT, Swing, JavaFX & SWT 8
B SWT TreeViewer dynamische Anzeige von Icons AWT, Swing, JavaFX & SWT 3
J Java - dynamische Anpassung an Fenstergröße? AWT, Swing, JavaFX & SWT 4
B Swing Dynamische JMenuBar AWT, Swing, JavaFX & SWT 2
C Swing Dynamische JComboBox (Filter) AWT, Swing, JavaFX & SWT 28
W "Dynamische JComboBoxes" AWT, Swing, JavaFX & SWT 5
N Swing Dynamische Controls AWT, Swing, JavaFX & SWT 5
C JTable dynamische erweitern AWT, Swing, JavaFX & SWT 2
T 2D-Grafik Statisches Hintergrundbild, dynamische Bilder drüber AWT, Swing, JavaFX & SWT 2
N Dynamische JFreechart updated UI nicht AWT, Swing, JavaFX & SWT 5
G Große dynamische ContextMenus erzeugen (Eclipse RCP) AWT, Swing, JavaFX & SWT 4
F Swing Dynamische Größenanpassung AWT, Swing, JavaFX & SWT 4
trash Dynamische JTable (SQL) AWT, Swing, JavaFX & SWT 5
L Dynamische Textgröße bei Buttons AWT, Swing, JavaFX & SWT 3
lordcarlos Dynamische und interaktive grafik AWT, Swing, JavaFX & SWT 5
T Swing JTable dynamische Zeilenhöhe AWT, Swing, JavaFX & SWT 5
U Dynamische Panel hinzufügen AWT, Swing, JavaFX & SWT 6
N Swing Dynamische JRadioButtons und Visual Editor AWT, Swing, JavaFX & SWT 4
Q Dynamische Zahl und Positionierung von Objekten AWT, Swing, JavaFX & SWT 5
S Swing Dynamische JPanels: Vertikales Strecken verhindern AWT, Swing, JavaFX & SWT 4
hdi dynamische Iteration über Components AWT, Swing, JavaFX & SWT 3
E Dynamische JComboBox AWT, Swing, JavaFX & SWT 3
F dynamische Ausgabe eines extenen Programms umleiten AWT, Swing, JavaFX & SWT 6
F Dynamische Swing Elemente AWT, Swing, JavaFX & SWT 10
G Dynamische JMenuBar AWT, Swing, JavaFX & SWT 2
T Dynamische Anpassung einer jCheckBox AWT, Swing, JavaFX & SWT 11
O Bindings, dynamische Verbindung (Vorbau mit Netbeans) AWT, Swing, JavaFX & SWT 10
G Dynamische Menüs mit Liste von MRU Dateien AWT, Swing, JavaFX & SWT 2
X Dynamische linien (Position und Länge) AWT, Swing, JavaFX & SWT 4
L Dynamische Buttons erstellt, aber wie ein Event zuweisen? AWT, Swing, JavaFX & SWT 11
T dynamische anzeige? AWT, Swing, JavaFX & SWT 4
S Dynamische Ausgabe im JTextField AWT, Swing, JavaFX & SWT 7
K dynamische jlabels AWT, Swing, JavaFX & SWT 21
M dynamische Grafik in JFrame einbetten AWT, Swing, JavaFX & SWT 2
G JTable dynamische Darstellung der ankommenden Daten AWT, Swing, JavaFX & SWT 19
G JTextField & Dynamische Grössenänderung? AWT, Swing, JavaFX & SWT 8
O Dynamische Checkboxen AWT, Swing, JavaFX & SWT 21
T Dynamische GUI's AWT, Swing, JavaFX & SWT 10
T Dynamische Look&Feels AWT, Swing, JavaFX & SWT 4
K dynamische Bilder laden AWT, Swing, JavaFX & SWT 5
M Elemente statisch anordnen AWT, Swing, JavaFX & SWT 4
_user_q ChoiceBox Elemente: Sprache ändern AWT, Swing, JavaFX & SWT 7
T Elemente auf vorheriger Stage, nach Wechsel der Stage ansprechen AWT, Swing, JavaFX & SWT 32
Lunar Swing JFrame erstellt; weitere Elemente werden nicht eingefügt/sind nicht zu sehen AWT, Swing, JavaFX & SWT 4
J JavaFX JavaFX Splitpane - Zugriff auf die Controller der Elemente AWT, Swing, JavaFX & SWT 8
G Swing Variable Elemente für GroupLayout AWT, Swing, JavaFX & SWT 18
F JFrame zeigt nicht alle Elemente auf anhieb an AWT, Swing, JavaFX & SWT 4
J JavaFX Elemente werden nicht zu TableView hinzugefügt AWT, Swing, JavaFX & SWT 3
J JavaFX JavaFX Elemente an Fenstergröße skalieren AWT, Swing, JavaFX & SWT 5
M Schnittpunkte zwischen zwei Graphics2D Elemente ermitteln. AWT, Swing, JavaFX & SWT 5
T LayoutManager Anordnen der Elemente im GridBagLayout AWT, Swing, JavaFX & SWT 11
T AWT Grafik"Array" einzelne Elemente verschieben AWT, Swing, JavaFX & SWT 1
sandaime Swing 3 JComboBoxen ausgelesen Elemente einzel ausgeben AWT, Swing, JavaFX & SWT 6
M JavaFX GUI-Elemente erstellen, nachdem die GUI geladen hat AWT, Swing, JavaFX & SWT 4
TheJavaKid JavaFX Elemente positionieren AWT, Swing, JavaFX & SWT 2
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
N JavaFX GUI Elemente einer anderen (FXML)Klasse ansprechen AWT, Swing, JavaFX & SWT 16
D JavaFX Elemente aus VBox unterscheiden AWT, Swing, JavaFX & SWT 1
K Kann nicht auf GUI Elemente zugreifen, mit einer Methode im Controller klappts, mit der anderen nich AWT, Swing, JavaFX & SWT 10
R Swing Elemente verschieben sich im GBL beim Ein/Ausblenden AWT, Swing, JavaFX & SWT 0
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
wolfgang63 JavaFX Elemente einer Group entfernen AWT, Swing, JavaFX & SWT 1
D SWT SWT Elemente aus anderen Klassen aufrufen - Invalid thread access AWT, Swing, JavaFX & SWT 6
O Ähnliche GUI Elemente - vererbung?! AWT, Swing, JavaFX & SWT 0
M AWT Gui anzeige Probes - Elemente erscheinen nicht regelmäßig AWT, Swing, JavaFX & SWT 2
M Swing JTabbedPane: Tab-Elemente anpassen AWT, Swing, JavaFX & SWT 3
T Swing Elemente der JList überlappend darstellen AWT, Swing, JavaFX & SWT 5
K GUI Elemente über eine separate Textdatei beschriften? AWT, Swing, JavaFX & SWT 4
T Alle Swing-Elemente anzeigen AWT, Swing, JavaFX & SWT 9
M Swing Elemente im Dialog neu "laden". AWT, Swing, JavaFX & SWT 6
T JTree - Elemente mit Doppelklick auswählen AWT, Swing, JavaFX & SWT 6
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
S Elemente im Panel in richtige Ausgangsstellung bringen AWT, Swing, JavaFX & SWT 10
K LayoutManager Wieso verschwinden Elemente? AWT, Swing, JavaFX & SWT 20
M JFrame + JNA/aero modul - GUI Elemente so möglich? AWT, Swing, JavaFX & SWT 28
P Elemente einer JList ausgeben AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben