Menu mit Testklasse aufrufen

soa

Erfahrenes Mitglied
Hallo,

ich habe hier eine Klasse menu, die ich mit einigen Komponenten gefüllt habe
und nun über eine Klasse test, die im gleichen package liegt, ausführen möchte.
Leider klappt das nicht so ganz.

Hie mal der Code:

PHP:
public class menu extends JDialog {
  JPanel panel1 = new JPanel();
  BorderLayout borderLayout1 = new BorderLayout();

  public menu(Frame frame, String title, boolean modal) {
    super(frame, "Programm Menue", modal);
    try {
      jbInit();
      pack();
      setMenu();
    }
    catch(Exception ex) {
      ex.printStackTrace();
    }
  }

  public menu() {
    this(null, "", false);
  }
  
  public JComponent setMenu(){
  
    JMenuBar menubar = new JMenuBar();
    
    JMenu menuDatei = new JMenu("Datei");
    JMenuItem dateiItemNeu = new JMenuItem("Datei neu");
    JMenuItem dateiItemOeffnen = new JMenuItem("Datei oeffnen");
    JMenuItem dateiItemKopieren = new JMenuItem("Datei kopieren");
    JMenuItem dateiItemLoeschen = new JMenuItem("Datei loeschen");
  
    JMenu menuBearbeiten = new JMenu("Bearbeiten");
    JMenuItem bearbeitenItemAendern = new JMenuItem("Datei aendern");
    JMenuItem bearbeitenItemVerschieben = new JMenuItem("Datei verschieden");
  
    menubar.add(menuDatei);
    menuDatei.add(dateiItemNeu);
    menuDatei.add(dateiItemOeffnen);
    menuDatei.add(dateiItemKopieren);
    menuDatei.add(dateiItemLoeschen);
    
    menubar.add(menuBearbeiten);
    menuBearbeiten.add(bearbeitenItemAendern);
    menuBearbeiten.add(bearbeitenItemVerschieben);
  
    return menubar;
  }// Ende des Menüs 

  private void jbInit() throws Exception {
    panel1.setLayout(borderLayout1);
    getContentPane().add(panel1);
  }
  
}// Ende der Klasse

In der Testklasse steht nur die main Methode:

PHP:
public class test1{

  public static void main(String args[]){
    menu mu = new menu();
    mu.menu();

  }
  
  
}//end class

Warum läßt sich die Klasse test nicht ausführen ?

Danke

Gruß
SOA
 
Ähm, nu joa, etwas kruder code oder? :)
Also Fehler/Unnötige Dinge gibt es in deinem Code genügend, aber wenn du sagst er startet nicht was schmeisst er den dann für eine Fehlermeldung? Ach ja und
Code:
 mu.menu();
kann garnicht klappen, da menu() ein Konstruktor ist also nur bei der Instanz Bildung aufgerufen werden kann...
Und nur so nebenbei, du erstellst zwar ein Menu aber du sagst deinem Dialog nie das er es auch anzeigen soll(das geht soweit ich weiss mit setJMenu()) aber die ganze Methode setMenu() macht in meinen Augen garkeinen Sinn, wieso gibst du als Rückgabewert nicht JMenu an? wieso JComponent?
 
Hallo Soa,

wie schon Elmato gesagt hat musst du das Menu einem Frame mit setJMenuBar übergeben.

Code:
import javax.swing.JFrame;
import javax.swing.JMenuBar;

public class test1 {

	public static void main(String args[]) {
		menu mu = new menu();
		
		JFrame frame = new JFrame();
		frame.setJMenuBar((JMenuBar) mu.setMenu());
		frame.setSize(300, 400);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

}

Vg Erdal
 
Schuldigung Harald,

da ich einfach die Klasse von Soa übernommen und ergänzt habe, hab ichs übersehen :-( . Kommt nicht wieder vor :) !

Vg Erdal
 
Ja, vollkommen richtig..... der Code ist sowas von "Krude", aber er funktioniert.
Dafür schon einmal vielen Dank.

Werde zukünftig auch meine Klassen namen groß schreiben ;)

Mmh, nicht das ich jetzt größenwahnsinnig werde, aber ich hätte da noch einmal eine
allgemeine Frage zur Struktur einer Applikation in Form eines Menü Dialoges.

Wie würde man die Funktionalität am besten implementieren. Hab also schon einmal
ein Menü. Es wäre doch bestimmt sinnvoll eine Funktion dateiOeffnen() in eine separate Klasse zu legen?

Und: Die EventListener wären wohl am Besten in der Klasse "Menu" aufgehoben ?

Vielleicht hat jemand auch einen Link zu einem Klassendiagramm o.ä.

Viele Grüße von der sonnigen Ostsee.
SOA
 
Hallo Soa,

schau mal in das Verzeichnis, wo dein JDK installiert ist, rein. Darin findest du einen Ordner demo. Im Ordner demo ist dann ein weiterer Ordner jfc. Hier siest du nun weitere Ordner. Unter anderem Notepad und Stylepad. Du hast dort jeweils eine demo-jar zum anschauen. Der Quellcode ist ebenfalls vorhanden.

Vg Erdal
 
Zurück