Programmierstiel ineinander geschachtelte Swing Oberflächen

Status
Nicht offen für weitere Antworten.

Marz

Aktives Mitglied
Hallo Zusammen!

Ich bin gerade dabei eine GUI zusammen zu Schreiben.

Zur Laufzeit werden dem Haupt-JPanel weitere Teil-JPanels hinzugefügt die ihrerseits wiederum zur Laufzeit Panels zugewiesen oder gelöscht bekommen.

wie kann ich nun sicherstellen, dass alles richtig dargestell wird?

Muss ich denn immer so etwas wie

Code:
private void add(){
    JPanel p = new JPanel();
    p.setBackgroundColor(Color.red);
    teilPanel.add(p);

    teilPanel.repaint();
    hauptPanel.repaint();
}

aufrufen?

Gruß Marz
 

Marz

Aktives Mitglied
Hallo,

validate() aufs obere Panel. Ok.

Aber wie kann man das elegant lösen? ich müsste ja jeder Methode in der ich sowas grafisches mache die Instance für das oberste Panel mitgeben um darauf dann Validate auslösen zu können
Oder?
 

The_S

Top Contributor
nö, musst du nicht. Wenn sich ein subpanel verändert, dann einfach auf dieses bzw. dessen parent ein validate aufrufen.
 
B

Beni

Gast
Wenn du LayoutManager verwendest, wird das validieren automatisch erledigt.
 

Marz

Aktives Mitglied
Vielen Dank Ihr Beiden für die Hinweise.

Funktioniert soweit.

hab noch ein Anderes Problem:

ich sollt sicherlich einen neuen Thread anfangen (Oder?)

ich füge ein JLabel in einen JFrame mit GridBackLayout.

wenn sich der Inhalt des Label Ändert, oder das Fenster neu skaliert wird, dann verschwindet das Panel!

Woran kann das liegen?
 
B

Beni

Gast
GridBagLayout, nicht GridBackLayout :wink:

Mögliche Ursachen:
- du benutzt komische Einstellungen für das Layout
- die verschwundene Component hat eine bevorzugte Grösse von 0/0
- die verschwundene Component hat dieselbe Farbe wie ihre Vater-Component
- du entfernst die verschwundene Component irgendwo
- du spielst böse mit paint-Mehtoden rum und hast was kaputt gemacht
- ...
 

Marz

Aktives Mitglied
Danke für die Aufzählung der Gründe und dem GridBaGLayout :oops:

da ich aber auch mit diesen Hinweisen den Fehler nicht Finden kann :cry:
mal ein paar ausgewählte Zeilen Code

hier das fragliche Label

Code:
	public JLabel getStatusOfConnectionLabel() {
		if (connectionStatusLable == null) {
			connectionStatusLable = new JLabel();
			connectionStatusLable.setFont(new Font("Arial", Font.PLAIN, 12));
			connectionStatusLable.setPreferredSize(new Dimension(100,100));
			connectionStatusLable.setOpaque(true);
		}
		if (!handler_ConnState.getNewState()) {
			connectionStatusLable.setText("OFFLINE");
			connectionStatusLable.setBackground(Color.red);
		} else {
			connectionStatusLable.setText("ONLINE");
			connectionStatusLable.setBackground(Color.green);
		}
		return connectionStatusLable;
	}

und das wird dann damit zum Labelfressenden JPanel hinzugefügt

Code:
public void addToInfoPanel(Component comp){
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.fill = GridBagConstraints.BOTH;
		gbc.gridheight = 0;
		gbc.gridwidth = -1;
		gbc.weightx = 1;
		gbc.weighty = 1;
		getInfoPanel().add(comp, gbc);
	}

Paint Methoden hab ich nicht überschrieben
und die Stelle getInfoPanel.remove(comp) ist auskommentiert...

tja, und das Label verswindet bei jedem skalieren...

Vieleicht noch eine Idee??
 
B

Beni

Gast
Das einzige was ich komisch finde ist das hier:
Code:
 gbc.gridwidth = -1;
-1 ist eine komische Breite, etwas dünn...
 
B

Beni

Gast
Habe noch in der API nachgeschaut, -1 ist dasselbe wie GridBagConstraints.RELATIVE. Also durchaus legal. Fragt sich nur ob das Absicht ist (falls ja: benutz die Konstante, und keine magischen Zahlen!), oder nicht (dann ist es wohl ein Fehler).
 

Marz

Aktives Mitglied
@Beni:

die -1 bedeudet, dass das hinzugefügte Objekt in diesem Fall in Zeile 0 als letztes Objekt rangehängt wird.

marz
 
B

Beni

Gast
Dann tritt ein:
Beni hat gesagt.:
benutz die Konstante, und keine magischen Zahlen!
:bae:

Falls du hier noch ne kluge Antwort kriegen willst: ein Programm das man ausführen kann wäre hilfreich...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Bilder ineinander kopieren AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben