JPanel mit Layout an JDialog übergeben...

Tsa

Mitglied
Hey Leute,
Ich mal wieder ;)
Also ich hab folgendes Problem:
Ich habe ein JDialog. Dieser soll hin und wieder neu bedruckt werden (Also mit neuen Buttons usw.)
Dieser JDialog sieht folgendermaßen aus:
Code:
package client.gui;

import javax.swing.JDialog;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import client.gui.held.HeldenAnzeigen;


public class HeldenDialog
{
	private static JDialog dialog = new JDialog(myFrame.getFRM(),"Helden",true);
	public HeldenDialog()
	{
		HeldenAnzeigen.heldenAnzeigen();
		dialog.setSize(400,400);
		dialog.setVisible(true);
	}
	
	public static void newPanel(JPanel newPanel)
	{
		dialog.getContentPane().removeAll();
		dialog.repaint();
		dialog.getContentPane().add(newPanel, BorderLayout.CENTER);
		dialog.getContentPane().repaint();
	}
}
Über die Funktion newPanel wird immer ein neues Panel gezeichnet.
HeldenAnzeigen soll nun erstellt nun ein JPanel mit einem GridBagLayout und ein paar Komponenten. Der relevante Teil sieht so aus:
Code:
public static void heldenAnzeigen()
	{
		actionBox.addItem("löschen");
		actionBox.addItem("aktivieren");

		panel.setLayout(gbl);
		panel.add(checkBox, zelle0_0);
		panel.add(actionBox, zelle0_1);
		panel.add(startButton, zelle1_1);
		panel.add(neuerHeld, zelle2_1);


		HeldenDialog.newPanel(panel);
	}

Hab die ganzen deklarierungen usw. mal rausgenommen, da sie wohl eh nichts zur Sache tun und es nur unübersichtlich machen.
Wenn ich dies nun allerdings aufrufe, dann kommt der Dialog mit einer Zeile wo alles drine steht und zum Teil übereinander gequetscht, so das man manche Komponenten nicht sieht :|
Ich weiß nicht was ich machen soll, hab schon viel versucht... Hat jemand ne Idee?
Wird denn ein Layout nicht mitübergeben? :|
Naja, hoffe mir kann wer helfen... Danke schonmal!
 
Woran es jetzt genau liegt kann ich dir auch nicht sagen, aber versuche mal den ganzen static Kram zu vermeiden, evt. liegt es daran. static benutzt du ansich nur für z-B- Methoden bei denen es keinen Sinn macht jedesmal eine neue Instanz zu bilden(z.B. Integer.parseInt etc.). Ansonsten kannst du auch noch versuchen invalidate und revalidate auf das Panel anzuwenden, evt. hilfts..
mfg
elmato
 
Hey,
Also wenn ich das static kram wegmach, bei allem, sagter mir nu immer wieder "cannot make a non-static referenz to the static method... " habs natürlich bei der methode auch weg gemacht.. mh naja, komisch!
revalidate sagter mir ist nicht vorhanden für Container und validate hatte ich schon ausprobiert :|
Trotzdem Danke, aber das hat mich nicht weitergebracht *g*
mfg,
Tsa
 
Ich weiss zwar nicht genau was du machen willst oder wo dein Problem liegt aber hier hast du ein wenig Code der dir evt weiterhilft..
Code:
package de.tutotials;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class Dialog extends JFrame {

	JDialog dialog;
	
	JButton b1 = new JButton("Ein Text");
	JButton b2 = new JButton("Ein anderer Text");
	
	public Dialog()  {
		super();
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(400,300);
		
		this.getContentPane().setLayout(new FlowLayout());
		dialog = new JDialog(this, "Helden", true);
		this.getContentPane().add(b1);
		b1.addActionListener(new ActionListener() {
		
			public void actionPerformed(ActionEvent e) {
				changeDialog(heldenAnzeigen("anlegen"));
		
			}
		
		});
		b2.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				changeDialog(heldenAnzeigen("löschen"));
		
			}
		
		});
		this.getContentPane().add(b1);
		this.getContentPane().add(b2);
		this.setVisible(true);
		
	}
	public void changeDialog(JPanel panel){
		dialog.getContentPane().removeAll();
		dialog.getContentPane().add(panel);
		dialog.repaint();
		dialog.setSize(50,50);
		dialog.setVisible(true);
	}
	public JPanel heldenAnzeigen(String text){
		JPanel panel = new JPanel();
		panel.add(new JLabel(text));
		return panel;
	}
	

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

}
ich weiss nicht ob es das ist was du machen willst, wenn nicht melde dich halt nochmal
mfg
elmato
 
Hey,
Ja so in etwa hats das getroffen, nur eine kleine Sache noch: Das JPanel soll ein Layout beinhalten! Ich schaffe es das Panel zu übergeben usw. aber das Layout ist danach völlig hinüber *gg* Alles ist in einer Zeile und übereinander! Hängt das vielleicht daran das das zugewiesene Layout nicht mit übergeben wird? Dann müsste ich mir mal Gedanken machen wie das realisierbar ist! Jetzt schau ich erstmal ob ich vielleicht nicht was bei dem GridBagLayout falsch gemacht habe :|
Vielen Dank soweit,
Tsa
 
Klappt doch ansich recht gut..
Code:
public JPanel heldenAnzeigen(String text){
		JPanel panel = new JPanel();
		GridBagLayout gbl = new GridBagLayout();
		GridBagConstraints gbc = new GridBagConstraints();
		panel.setLayout(gbl);
		gbc.gridx = 0;
		gbc.gridy = 0;
		panel.add(new JLabel(text), gbc);
		gbc.gridx = 0;
		gbc.gridy = 1;
		panel.add(new JLabel(text), gbc);
		gbc.gridx = 0;
		gbc.gridy = 2;
		panel.add(new JLabel(text), gbc);
		return panel;
	}
ist natürlich jetzt nur die minimal Implementierung eines GridBagLayouts...
mfg
elmato
 
Hey,
Super, jetzt gehts :)
Hab einfach nochmal die eine Klasse neu geschrieben! Werde wohl irgendwas anders gemacht haben! Manchmal ist es halt am besten mal was wegzuschmeißen. :)
Vielen Dank elmato und allen die sich drüber gedanken gemacht haben!
mfg,
Tsa
 
Zurück