JMenuBar wiederverwenden und Eventhandling anpassen

strußi

Top Contributor
Hey Leute,

bin gerade dabei meine Menubar auszulagern, dabei ist mir aufgefallen, dass ich das so nicht stehen lassen kann, weil auch das handling angepasst werden muss, je nach klasse, die es aufruft, bzw. in einzelnen klassen Methoden liegen die aufgerufen werden sollen.

Java:
package gui;

import gui.messwerte.StandardGUI;
import java.awt.event.*;
import javax.swing.*;

/**
 *
 * @author Christian
 */
public class Menubar implements ActionListener{

    // Variablen für die Sichtbarkeit
    private boolean progStartB =true;
    private boolean progSaveB =true;
    private boolean progOpenB =true;
    private boolean auswMenuB =true;
    
    
    //M E N Ü
    //Menüpunkte für Programmstart
    JMenuItem progStart, progOpen, progSave, progNull, progExit;
    //Menüpunkte für die Dateneingabe
    JMenuItem dateneingabeItem;    
    //Menüpunkte für die Auswertung
    JMenuItem  ausw, auswPerlschnur, auswHorizont, auswGrafik;   
    //Menüpunkte für Hilfefunktion
    JMenuItem hilfe, hilfeVersion, hilfeEinlesen;
    
    
    /**
     * Methode zum erstellen der Menüs
     * Erstellen der Menüpunkte und 
     * Initialisierung der Menüunterpunkte mit Name sowie Einbindung in den ActionListener
     * 
     * @return 
     */
    public JMenuBar menu(){
        JMenuBar bar =new JMenuBar(); //Menüleiste auf die alle Menüpunkte kommen
        JMenu programmMenu =new JMenu( "Programm"); //Menü "Programm" erstellen
            programmMenu.setMnemonic( 'P'); //Ansprechen des Menüpunktes über Alt+ Markierte Buchstabe
        Icon iHome =new ImageIcon( "icon\\home.gif"); //Icon für den Menüpunkt erstellen
        progStart =new JMenuItem( "Startbildschirm", iHome); //Menüpunkt erstellen
            progStart.addActionListener( this); //Menüpunkt im ActionListener anmelden
            programmMenu.add( progStart); //Menüpunkt im Menü anmelden
            progStart.setAccelerator( // Funktionalität Strg +Buchstabe nach drücken Alt+ Menü
                KeyStroke.getKeyStroke( 'H', InputEvent.CTRL_DOWN_MASK )
              );
            progStart.setEnabled( progStartB);
        Icon iSave =new ImageIcon( "icon\\save_16.png"); //Icon für den Menüpunkt erstellen
        progSave =new JMenuItem( "Speichern", iSave); //Menüpunkt erstellen
            progSave.addActionListener( this); //Menüpunkt im ActionListener anmelden
            programmMenu.add( progSave); //Menüpunkt im Menü anmelden
            progSave.setAccelerator( // Funktionalität Strg +Buchstabe nach drücken Alt+ Menü
                KeyStroke.getKeyStroke( 'S', InputEvent.CTRL_DOWN_MASK )
              );
            progSave.setEnabled( progSaveB);
        Icon iOpen =new ImageIcon( "icon\\open_16.gif"); //Icon für den Menüpunkt erstellen
        progOpen =new JMenuItem( "Öffnen", iOpen); //Menüpunkt erstellen
            progOpen.addActionListener( this); //Menüpunkt im ActionListener anmelden
            programmMenu.add( progOpen); //Menüpunkt im Menü anmelden
            progOpen.setAccelerator( // Funktionalität Strg +Buchstabe nach drücken Alt+ Menü
                KeyStroke.getKeyStroke( 'O', InputEvent.CTRL_DOWN_MASK )
              );
            progOpen.setEnabled( progOpenB);
        programmMenu.addSeparator();
        Icon iClose =new ImageIcon( "icon\\exit_20.png"); //Icon für den Menüpunkt erstellen
        progExit =new JMenuItem( "Werteeingabe Beenden", iClose); //Menüpunkt erstellen
            progExit.addActionListener( this); //Menüpunkt im ActionListener anmelden
            programmMenu.add( progExit); //Menüpunkt im Menü anmelden
            
        JMenu datInMenu =new JMenu( "Dateneingabe"); // Menü "Dateneingabe" erstellen
        datInMenu.setMnemonic( 'D');
        dateneingabeItem =new JMenuItem( "Messwerte eingeben"); //Menüpunkt erstellen
            dateneingabeItem.addActionListener( this); //Menüpunkt im ActionListener anmelden
            datInMenu.add( dateneingabeItem); //Menüpunkt im Menü anmelden
        
        JMenu auswMenu =new JMenu( "Auswertung"); //Menü "Auswertung" erstellen
        auswMenu.setMnemonic( 'A'); //Ansprechen des Menüpunktes über Alt+ Markierte Buchstabe
            auswMenu.setEnabled( auswMenuB);
        ausw =new JMenuItem( "Auswertung"); //Menüpunkt erstellen
            ausw.addActionListener( this); //Menüpunkt im ActionListener anmelden
            auswMenu.add( ausw); //Menüpunkt im Menü anmelden
        auswPerlschnur =new JMenuItem( "Perlschnurverfahren"); //Menüpunkt erstellen
            auswPerlschnur.addActionListener( this); //Menüpunkt im ActionListener anmelden
            auswMenu.add( auswPerlschnur); //Menüpunkt im Menü anmelden
        auswHorizont =new JMenuItem( "Horizontenverfahren"); //Menüpunkt erstellen
            auswHorizont.addActionListener( this); //Menüpunkt im ActionListener anmelden
            auswMenu.add( auswHorizont); //Menüpunkt im Menü anmelden
        auswMenu.addSeparator(); //Mehtode zum einfügen einer Trennlinie
        auswGrafik =new JMenuItem( "Grafische Auswertung"); //Menüpunkt erstellen
            auswGrafik.addActionListener( this); //Menüpunkt im ActionListener anmelden
            auswMenu.add( auswGrafik); //Menüpunkt im Menü anmelden
        
        JMenu hilfeMenu =new JMenu( "Hilfe"); //Hilfemenü
        hilfeMenu.setMnemonic( 'H'); //Ansprechen des Menüpunktes über Alt+ Markierte Buchstabe
        Icon iHelp =new ImageIcon( "icon\\Help.png");
        hilfe =new JMenuItem( "Hilfe", iHelp);
            hilfe.addActionListener( this);
            hilfeMenu.add( hilfe);
        Icon iInfo =new ImageIcon( "icon\\info_16.png"); //Icon für den Menüpunkt erstellen
        hilfeVersion =new JMenuItem( "Versionsinfo", iInfo);
            hilfeVersion.addActionListener( this);
            hilfeMenu.add( hilfeVersion);
        hilfeEinlesen =new JMenuItem( "Einlese-Info", iInfo);
            hilfeEinlesen.addActionListener( this);
            hilfeMenu.add( hilfeEinlesen);
            
        bar.add( programmMenu); //Der Menüleiste das Menü "Programm" hinzufügen
        bar.add( datInMenu); //Der Menüleiste das Menü "Dateneingabe" hinzufügen
        bar.add( auswMenu); //Der Menüleiste das Menü "Auswertung" hinzufügen
        bar.add( hilfeMenu); //Hinzufügen eines Hilfemenüs
        return bar;
    }
    
    /**
     * Methode für die Bestimmtung, welche Menüpunkte/-items angezeigt werden.
     * @param progStartB
     * @param progSaveB
     * @param progOpenB
     * @param auswB 
     */
    public void setMenuesVisible( boolean progStartB, boolean progSaveB, boolean progOpenB, boolean auswB){
        this.progStartB =progStartB;
        this.progSaveB =progSaveB;
        this.progOpenB =progOpenB;
        this.auswMenuB =auswB;
    }
    
    
    @Override
    public void actionPerformed( ActionEvent e){
        if( e.getSource() ==progStart){ //Startbildschirm - Disable
        } else if( e.getSource() ==progOpen){ //Öffnen
        } else if( e.getSource() ==progSave){ //Speichern - Disable
        } else if( e.getSource() ==progExit){ //Beenden
        } else if( e.getSource() ==dateneingabeItem){ //Dateneingabemaske start
            StandardGUI sg =new StandardGUI();
            sg.start();
        } else if( e.getSource() ==ausw){
        } else if( e.getSource() ==auswPerlschnur){ //Berechnung mittels Perlschnurverfahren
        } else if( e.getSource() ==auswHorizont){ //Berechnung mittels Horizontenverfahren
        } else if( e.getSource() ==auswGrafik){ //Grafischeauswertung
        } else if( e.getSource() ==hilfe){ //Größe Hilfe
        } else if( e.getSource() ==hilfeVersion){ //Versionsinformationen
        } else if( e.getSource() ==hilfeEinlesen){ //Hilfe für das Einlesen von Textdateien
        } else{}
    }

}

Jetzt die frage, wie lös ich den Actionteil aus, bzw. übergebe einzelne mehtodenaufrufe, damit es noch mehr OO ist. :bahnhof:

Einer meiner Dozenten hätte gesagt, der Programmierstil, sofern vorhanden wäre pathologisch.

Danke für euere Antworten und Grüße
Chris
 

strußi

Top Contributor
Kannst du bitte ein codingbeispiel posten?

ich dreh bei soviel text durch, und ganz klar ist es mit auch nicht geworden.

Grüße
Chris
 

kaoZ

Top Contributor
Ich versuch mal es dir vom Handy aus zu erläutern,

Du hast ein JMenu, diesem sind Elemente zugeordnet, die JMenuItem, man kann jetzt hergehen und allen items einen listener zuweisen, oder man definiert für jedes Item eine eigene Action, so ds diese Actions z.b in einer toolbar ebenfalls verwendet werden können.

Dies könnte so aussehen:

Java:
public class CloseAction extends AbstractAction {

  JFrame frame;

public CloseAction (JFrame frame){
  super ("Schließen");
  this.frame = frame;
}

@Override
public void actionPerformed(ActionEvent event){
 this.frame.dispose ();
}
}

Wenn du jetzt diese Action deinem JMenuItem zuweist

Java:
JMenuItem close = JMenuItem(new CloseAction (frame));

Agiert diese Action mit der von dir definierten Aktion, das Fenster ( in diesen Fall über die Referenz frame angesprochene)wird abgebaut / geschlossen.

Diese Lösung lässt sich überall dort sinnvoll einsetzen wo du ggf. Mehrere Buttons für gleiche Aktionen hast, eben Menu und toolbar z.b
 

strußi

Top Contributor
Danke kaoZ,

hat mir leider nicht weiter geholfen. Steh da aufm wlan-kabel :bloed:
Ich schau mal ob ich eine andere Lösung finde

grüße
Chris
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JMenuBar AWT, Swing, JavaFX & SWT 6
K Event Handling Über JMenuBar die diversen Panels anzeigen AWT, Swing, JavaFX & SWT 10
J Swing JMenuItem blockiert JMenuBar AWT, Swing, JavaFX & SWT 2
S JMenuBar bei sichtbarer JGlassPane AWT, Swing, JavaFX & SWT 1
R JMenuBar.setFont tut nix ? AWT, Swing, JavaFX & SWT 1
I Swing JMenuBar auch unten am JFrame? AWT, Swing, JavaFX & SWT 2
A Swing JMenuBar updaten AWT, Swing, JavaFX & SWT 2
kaoZ Swing JMenuBar, Preferences, Properties... und viele andere lustige Dinge (Best Practice) AWT, Swing, JavaFX & SWT 15
Q Designfrage zur JMenuBar AWT, Swing, JavaFX & SWT 6
B Swing JMenuBar unten in der Frame setzen? AWT, Swing, JavaFX & SWT 15
Q Fragen zur JMenuBar & Co. AWT, Swing, JavaFX & SWT 3
M Über eine JMenuBar überprüfen ob ein JCheckBoxMenuItem selectiert ist. AWT, Swing, JavaFX & SWT 4
M JMenuBar, JMenu, JMenuItem wird nicht angezeigt AWT, Swing, JavaFX & SWT 16
G Swing JMenuBar zu weit links und oben dargestellt AWT, Swing, JavaFX & SWT 5
B Swing Dynamische JMenuBar AWT, Swing, JavaFX & SWT 2
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
D JMenuBar - CardLayout (Klasse anzeigen) AWT, Swing, JavaFX & SWT 3
S JMenuBar Frame Abstand AWT, Swing, JavaFX & SWT 3
H jMenuBar AWT, Swing, JavaFX & SWT 13
NR_EIGHT Swing Probleme mit JMenuBar AWT, Swing, JavaFX & SWT 6
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
Madlip JMenuBar in JFrame AWT, Swing, JavaFX & SWT 5
B JFrame / JMenuBar => Anfängerprobleme AWT, Swing, JavaFX & SWT 2
R JMenuBar AWT, Swing, JavaFX & SWT 2
S JMenuBar nach 1. Klick deselectieren AWT, Swing, JavaFX & SWT 6
Z JMenuBar wird nicht in JFrame angezeigt AWT, Swing, JavaFX & SWT 2
N JMenuBar verschwindet nicht nach ComponentEvent AWT, Swing, JavaFX & SWT 6
C JMenuBar aktualisieren? AWT, Swing, JavaFX & SWT 2
A Doppelte JMenuBar AWT, Swing, JavaFX & SWT 2
X NullPointerException beim Einfügen einer JMenuBar AWT, Swing, JavaFX & SWT 4
C JMenuBar im JFrame abgehackt AWT, Swing, JavaFX & SWT 7
J Swing JFrame mit JMenuBar, allerdings ohne Erfolg AWT, Swing, JavaFX & SWT 10
K Look&Feel von JMenuBar und Subkomponenten anpassen AWT, Swing, JavaFX & SWT 6
C JMenuBar linksbündig AWT, Swing, JavaFX & SWT 6
C Größe JMenuBar AWT, Swing, JavaFX & SWT 5
KrokoDiehl Swing Actions direkt auf der JMenuBar AWT, Swing, JavaFX & SWT 6
L Swing Kommunikation zwischen JMenuBar und anderen Componenten AWT, Swing, JavaFX & SWT 2
Developer_X Swing JMenuBar Layout AWT, Swing, JavaFX & SWT 2
kniffel JMenuBar aus anderer Klasse AWT, Swing, JavaFX & SWT 10
G Dynamische JMenuBar AWT, Swing, JavaFX & SWT 2
G JMenuBar verschmälern AWT, Swing, JavaFX & SWT 2
M ALT shortcut für JMenuBar deaktivieren AWT, Swing, JavaFX & SWT 3
X JMenuBar überlappt von JPanel :( AWT, Swing, JavaFX & SWT 7
M4nuel Warum überlagert JDesktopPane mein JMenuBar? AWT, Swing, JavaFX & SWT 5
G StatusBar Optik wie JMenuBar; GUI-Erzeugung delegieren AWT, Swing, JavaFX & SWT 2
J JMenuBar in Frame einbauen AWT, Swing, JavaFX & SWT 6
D Canvas über JMenuBar AWT, Swing, JavaFX & SWT 7
P JMenuBar und JToolBar Anzeige Probleme AWT, Swing, JavaFX & SWT 5
C JLabel in JMenuBar frei platzieren AWT, Swing, JavaFX & SWT 2
B JMenubar AWT, Swing, JavaFX & SWT 5
Chris_1980 Makierungsfarbe bei JMenuBar ändern AWT, Swing, JavaFX & SWT 5
L Problem mit JMenuBar AWT, Swing, JavaFX & SWT 5
F JTextField rechts in der JMenuBar AWT, Swing, JavaFX & SWT 4
A gezeichnete Linie verschwindet, wenn ich JMenuBar öffne AWT, Swing, JavaFX & SWT 2
I JMenuBar - Menüs sortieren AWT, Swing, JavaFX & SWT 2
S JMenuBar mit Action belegen! AWT, Swing, JavaFX & SWT 5
M JMenuBar AWT, Swing, JavaFX & SWT 7
B JMenuBar sowie Buttons nach repaint auf JPanel AWT, Swing, JavaFX & SWT 2
T JMenuBar ausblenden lassen aber Hotkeys sollen erhalten sein AWT, Swing, JavaFX & SWT 2
S JMenuBar + update AWT, Swing, JavaFX & SWT 3
M JMenuBar - JMenu mit Tastenkombination aufrufen / anzeigen AWT, Swing, JavaFX & SWT 8
T JMenuBar zweizeilig AWT, Swing, JavaFX & SWT 2
A JMenuBar + paint (Image) AWT, Swing, JavaFX & SWT 6
M JmenuBar wird net angezeigt :( AWT, Swing, JavaFX & SWT 6
U komplette JMenuBar deaktivieren? AWT, Swing, JavaFX & SWT 4
S Mausklick reagiert nicht im JMenuBar AWT, Swing, JavaFX & SWT 4
A JMenuBar verschieben. AWT, Swing, JavaFX & SWT 4
T JMenuBar wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 5
H JFrame, JMenuBar, ScrollBar AWT, Swing, JavaFX & SWT 3
M Swing - Aktionen wiederverwenden AWT, Swing, JavaFX & SWT 9
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
K AWT Eventhandling AWT, Swing, JavaFX & SWT 2
G Generelle Vorgehensweise Eventhandling bei GUI Programmierung AWT, Swing, JavaFX & SWT 14
M Problem beim Eventhandling AWT, Swing, JavaFX & SWT 5
M AWT Eventhandling AWT, Swing, JavaFX & SWT 15
P Eventhandling AWT, Swing, JavaFX & SWT 7
F EventHandling AWT, Swing, JavaFX & SWT 6
L Swing JButton macht Eventhandling kaputt AWT, Swing, JavaFX & SWT 3
S Eventhandling obwohl Fenster nicht im Fokus AWT, Swing, JavaFX & SWT 5
G Eventhandling für JTable AWT, Swing, JavaFX & SWT 3
S Problem mit Eventhandling (Anfängerfrage) AWT, Swing, JavaFX & SWT 12
J eventhandling / Problemmeldung Bitte schaut euch den Code an AWT, Swing, JavaFX & SWT 2
P SWT - EventHandling AWT, Swing, JavaFX & SWT 4
G EventHandling AWT, Swing, JavaFX & SWT 18

Ähnliche Java Themen

Neue Themen


Oben