Bei Klick auf einen Menüeintrag, soll Tabelle ausgegeben wer

Status
Nicht offen für weitere Antworten.

Neolity

Aktives Mitglied
Hallo,

folgende Frage:

Ich habe mal angefangen ein Programm zu schreiben, mit dem man (Tischtennis) Mannschaften verwalten kann. Nun habe ich ein Dropdown Menü "Optionen" mit den Einträgen "Mannschaft betrachten", "neuen Spieler einfügen", "Spielplanungen betrachten" und "neues Spiel planen". Das Menü steht und funktioniert auch, aber ich möchte jetzt gerne, dass bei einem Klick auf "Mannschaft betrachten" beispielsweise, auch etwas passiert! 🙂 Soweit so gut, mit einem Action Listener lässt sich das ganz gut regeln und er gibt jetzt bei einem Klick auf einen Menüeintrag den Namen aus. Das heißt "klick" auf "Mannschaft betrachten", dann wird in der Konsole "Mannschaft betrachten" ausgegeben. Jetzt möchte ich aber natürlich nicht irgendwas in der Konsole ausgeben, sondern hätte gerne bei einem Klick auf "Mannschaft betrachten" eine Tabelle mit den Mannschaftsmitgliedern und einigen Daten ausgegeben. Nun scheitert das ganze aber schon daran, überhaupt bei einem Klick auf "Mannschaft betrachten" eine Tabelle auszugeben!

Hier mal der Konstruktor:

Code:
	test()
	{
		super("Mannschaftsverwaltung");
		setSize(1024, 768);
		setLayout(new FlowLayout());
		addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent we)
			{
				System.exit(0);
			}
		});
		JMenuBar menubar = new JMenuBar();
		menubar.add(createFileMenu());
		setJMenuBar(menubar);
		setVisible(true);
	}

Das Erstellen der Menüeinträge

Code:
	private JMenu createFileMenu()
	{
		JMenu ret = new JMenu("Optionen");
		JMenuItem mi;
		mi = new JMenuItem("Mannschaft betrachten");
		mi.addActionListener(this);
		ret.add(mi);
		mi = new JMenuItem("neuen Spieler einfügen");
		mi.addActionListener(this);
		ret.add(mi);
		mi = new JMenuItem("Spielplanungen betrachen");
		mi.addActionListener(this);
		ret.add(mi);
		mi = new JMenuItem("neues Spiel planen");
		mi.addActionListener(this);
		ret.add(mi);

		return ret;
	}

Die actionPerformed Methode

Code:
	public void actionPerformed(ActionEvent ae)
	{
		if (ae.getActionCommand() == "Mannschaft betrachten")
		{
			Team neu = new Team();
			showTeam();
		}
		else
		{
			System.out.println(ae.getActionCommand());
		}
	}

und die "showTeam Methode

Code:
	public void showTeam()
	{
		JTable tabelle = new JTable(5,5);
		add(tabelle);
	}

Wenn ich showTeam() direkt im Konstruktor angebe, dann wird die Tabelle (natürlich direkt bei Start) ausgegeben. Warum nicht so wie ich es jetzt mache?
Für Hilfe wäre ich sehr dankbar! 🙂
 
Du musst die Komponenten die du während der Laufzeit hinzufügst mit einem updateUI() neu zeichnen.
Da das JFrame keine updateUI() Methode hat, würde ich dir raten eine JPanel- Instanzvariable zu erstellen.
Die neuen Methoden würden dann so aussehen:
Code:
public Test(){
		super("Mannschaftsverwaltung");
		setSize(1024, 768);
		getContentPane().add(pnl);//<-- JPanel-Instanz Variable
		addWindowListener(new WindowAdapter(){
         	public void windowClosing(WindowEvent we){
            	System.exit(0);
			}
		});
		JMenuBar menubar = new JMenuBar();
		menubar.add(createFileMenu());
		setJMenuBar(menubar);
		setVisible(true); 
	}
public void showTeam(){
		JTable tabelle = new JTable(5,5);
		pnl.add(tabelle);
		pnl.updateUI();
	}

mfg Robb
 
Hi

Wenn du nach dem hinzufügen der Tabelle noch ein
validate();
machst, sollte sie erscheinen.

Allerdinst solltest du auch überlegen, ob das der Weisheit letzter Schluss ist. Wenn du dann etwas anderes anzeigen willst, mußt du erst die Tabelle entfernen und dann das neue hinzufügen. Als Alternative könntest du alles, was du anzeigen willst, in verschiedene JPanels packen, und mit einem CardLayout jeweils das gewünschte anzeigen.

bye

P.S:
Code:
      addWindowListener(new WindowAdapter()
      {
         public void windowClosing(WindowEvent we)
         {
            System.exit(0);
         }
      });
kann man ersetzen duch
Code:
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
@robb: Bitte! NICHT updateUI aufrufen!
updateUI ruft man auf, wenn sich das LookAndFeel geändert hat - also so gut wie nie! (Dass bei updateUI "zufällig" auch validate() aufgerufen wird, sorgt dafür, dass das immer wieder empfohlen wird, es ist aber eigentlich unfug....)
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben