JMenuBar verschwindet nicht nach ComponentEvent

N4pst3r

Mitglied
Hallöle ihrs,

Ich habe folgendes Problem:
Ich habe eine JMenuBar in einen JFrame gebaut. In der JMenuBar sind eine menge JButtons und JMenus.
Wenn ich meinen Frame jetzt größer zieh will sich die JMenuBar allerdings nicht aktialisieren sprich anpassen. Sie bleibt in ihrer ursprünglichen Form.
so sieht der relevante Code aus:

Java:
public class Prog extends JFrame implements ActionListener, MouseListener, ComponentListener	{
	JFrame frame = new JFrame( "prog" );
	JMenuBar jmnBar;
	JMenu jmnMenu;
	JMenu jmnButtons;

	public void Frame()	{
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane();
		frame.setSize( 338, 200 );
		frame.setLocationRelativeTo(null);
		frame.setIconImage( img );
		frame.setVisible( true );
		frame.setResizable( true );
		frame.addComponentListener( this );
	}

	public ueberladen()	{

		jmnButtons = new JMenu();
		jmnButtons.addMouseListener( this );

		jmnBar = new JMenuBar();
		jmnMenu = new JMenu();

		jmnBar.add( jmnMenu );
		jmnBar.addComponentListener( this );
		setJMenuBar( jmnBar );

		frame.add( jmnBar, BorderLayout.NORTH );
	}

	public void componentResized( ComponentEvent e ) {
		setJMenuBar( null );
		frame.remove( jmnBar );
		frame.validate();
	}

	public void componentMoved( ComponentEvent e ) {
	}

	public void componentShown( ComponentEvent e ) {
	}

	public void componentHidden( ComponentEvent e ) {
	}

	public static void main( String[] args )	{
		prog p = new prog();
		p.Frame();
	}
           }

Ich benutze
Java:
		setJMenuBar( null );
		frame.remove( jmnBar );
		frame.validate();
um die MenuBar im ComponentListener zu löschen. Aber das will garnicht so wie ich will.

Weiß mir jemand zu helfen?

Gruß
N4pst3r
 

MQue

Top Contributor
Du hast da ein Probelm mit dem Frame,
1. deine Klasse erbt von Frame
2. und die erzeugst in deiner Frame- Klasse einen weiteren JFrame.
das ist einer zuviel.




Ich würds so machen:

Java:
package jmenubartest;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;

public final class Prog implements ActionListener, MouseListener, ComponentListener    {

    final JFrame frame;

    public Prog() {
        frame = new JFrame( "prog" );
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize( 338, 200 );
        frame.setLocationRelativeTo(null);     
        frame.setResizable( true );
        frame.addComponentListener( this );
        final JMenuBar menuBar = ueberladen();
        frame.setJMenuBar( menuBar );
        frame.add( menuBar, BorderLayout.NORTH );
        frame.setVisible( true );
    }

    public JMenuBar ueberladen() {
        JMenu jmnButtons = new JMenu();
        jmnButtons.addMouseListener( this );
        final JMenuBar jmnBar = new JMenuBar();
        JMenu jmnMenu = new JMenu("MenuTest");
        jmnBar.add( jmnMenu );
        jmnBar.addComponentListener( this );
        return jmnBar;
    }

    public void componentResized( ComponentEvent e ) {
        frame.setJMenuBar( null );
        //frame.remove( jmnBar );
        frame.validate();
        }

    public void componentMoved( ComponentEvent e ) {
        }

    public void componentShown( ComponentEvent e ) {
        }

    public void componentHidden( ComponentEvent e ) {
        }

    public void actionPerformed(ActionEvent e) {
        System.out.println("actionPerformed");
        }

    public void mouseClicked(MouseEvent e) {
        System.out.println("mouseClicked");
        }

    public void mousePressed(MouseEvent e) {
        System.out.println("mousePressed");
        }

    public void mouseReleased(MouseEvent e) {
        System.out.println("mouseReleased");
        }

    public void mouseEntered(MouseEvent e) {
        System.out.println("mouseEntered");
        }

    public void mouseExited(MouseEvent e) {
        System.out.println("mouseExited");
        }

    public static void main( String[] args )    {
        Prog p = new Prog();
        }
    }
 

N4pst3r

Mitglied
erstmal vielen dank für die schnelle antwort...
das mit dem frame hat mich sowieso schon gewundert da ich den sonst immer direkt in der main-methode erstelle diesmal aber einen listener dranhängen musste.

hast du deinen Code mal getestet?
merkwürdigerweise bleibt die menubar immer noch an ort und stelle ;(

ich weiß auch nicht denn
Java:
 frame.setJMenuBar( null );
müsste doch in diesem fall die menubar lösen?! :bahnhof:
 

MQue

Top Contributor
Ich hab jetzt mal so gemacht, schau mal, ob es deinen Anforderungen genügt.
Wenn der Frame dargestellt wird, dann wird schon die MEthode componentResized aufgerufen, deshalb siehst du dann nie das Menü.
du musst halt noch die Logik in diese Methode einbauen, wenn z.B.: die Componente (also der Frame) um 10 Pixel vergrößert wurde (x und y), dann Menü weg.


Java:
package jmenubartest;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;

public final class Prog implements ActionListener, MouseListener, ComponentListener    {

    final JFrame frame;
    int trigger = 0;
    JMenuBar jmnBar;

    public Prog() {
        frame = new JFrame( "prog" );
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize( 338, 200 );
        frame.setLocationRelativeTo(null);     
        frame.setResizable( true );
        frame.addComponentListener( this );
        final JMenuBar menuBar = ueberladen();
        frame.setJMenuBar( menuBar );
        frame.add( menuBar, BorderLayout.NORTH );
        frame.setVisible( true );
    }

    public JMenuBar ueberladen() {
        JMenu jmnButtons = new JMenu();
        jmnButtons.addMouseListener( this );
        jmnBar = new JMenuBar();
        JMenu jmnMenu = new JMenu("MenuTest");
        jmnBar.add( jmnMenu );
        jmnBar.addComponentListener( this );
        return jmnBar;
    }

    public void componentResized( ComponentEvent e ) {
        if(trigger < 3) {
            trigger++;
            return;
            }
        System.out.println("in componentResized");
        int h = frame.getSize().height;
        int w = frame.getSize().width;
        frame.setJMenuBar( null );
        frame.remove( jmnBar );
        frame.validate();
        }

    public void componentMoved( ComponentEvent e ) {
        }

    public void componentShown( ComponentEvent e ) {
        }

    public void componentHidden( ComponentEvent e ) {
        }

    public void actionPerformed(ActionEvent e) {
        System.out.println("actionPerformed");
        }

    public void mouseClicked(MouseEvent e) {
        System.out.println("mouseClicked");
        }

    public void mousePressed(MouseEvent e) {
        System.out.println("mousePressed");
        }

    public void mouseReleased(MouseEvent e) {
        System.out.println("mouseReleased");
        }

    public void mouseEntered(MouseEvent e) {
        System.out.println("mouseEntered");
        }

    public void mouseExited(MouseEvent e) {
        System.out.println("mouseExited");
        }

    public static void main( String[] args )    {
        Prog p = new Prog();
        }
    }
 

N4pst3r

Mitglied
jo klappt.
ich danke dir vielmals.
an dem problem hielt ich mich schon lange auf.
:applaus:

edit:
ich habe mir schon nen int = 0; eingebaut der mit jedem aufruf des events hochzählt.
Java:
    public void componentResized( ComponentEvent e ) {
			iComponent++;
			System.out.println( iComponent );

			if( iComponent > 30 )	{
        frame.setJMenuBar( null );
        //frame.remove( jmnBar );
        frame.validate();
        }
		}
war nur testweise aber es funzte trotzdem nicht ;)

edit: + thanks
 
Zuletzt bearbeitet:

MQue

Top Contributor
Funktioniert aber, du musst

//frame.remove( jmnBar );

auskommentieren bzw. einkommentieren.
Ich würds über die Größe des JFrames machen, wenn der Frame eine Breite von x und eine Höhe von y hat, dann Menü weg, ansonsten anzeigen.
 

N4pst3r

Mitglied
naja er soll im endeffekt eine sehr komplexe menubar bei einer veränderung des frames in X-richtung löschen und wieder komplett neu durch eine schleife aufbauen. Bis auf die funktion mit dem löschen klappte der rest beim durchtesten super und somit kann ich das programm endlich abschließen^^

+ erledigt
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A gezeichnete Linie verschwindet, wenn ich JMenuBar öffne AWT, Swing, JavaFX & SWT 2
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
S JMenuBar wiederverwenden und Eventhandling anpassen AWT, Swing, JavaFX & SWT 4
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
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
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
DonBronson Gezeichnetes Objekt verschwindet nachdem erneut gezeichnet wird AWT, Swing, JavaFX & SWT 8
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
E Button verschwindet nachdem ein Rechteck gezeichnet wurde AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
E Swing Text verschwindet AWT, Swing, JavaFX & SWT 1
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
javampir Java FX Text verschwindet nicht AWT, Swing, JavaFX & SWT 9
A Swing Koordinatensystem wird gezeichnet verschwindet aber und die Einteilungen bleiben nicht bestehen AWT, Swing, JavaFX & SWT 5
R TriangleMesh verschwindet teilweise beim resizen des Frames, sowie beim rotieren? AWT, Swing, JavaFX & SWT 1
T AWT JTextfield verschwindet AWT, Swing, JavaFX & SWT 10
S LayoutManager TextField verschwindet / wird klein AWT, Swing, JavaFX & SWT 4
D Swing JOptionPane verschwindet beim 2. Aufruf einfach so?? AWT, Swing, JavaFX & SWT 2
J JPanel verschwindet... AWT, Swing, JavaFX & SWT 8
L Border verschwindet durch Graphics.drawImage() AWT, Swing, JavaFX & SWT 4
frankred Swing JMenu verschwindet nicht beim klicken ausserhalb des JMenu! AWT, Swing, JavaFX & SWT 4
P Swing Jtable mit Delete Button (Button verschwindet nicht bei Delete)) AWT, Swing, JavaFX & SWT 5
G Menü verschwindet durch .setText() AWT, Swing, JavaFX & SWT 4
J JTextArea verschwindet bei resize vom JFrame AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Linie verschwindet beim Zeichnen AWT, Swing, JavaFX & SWT 10
S JCheckBoxMenuItem - Haekchen verschwindet bei Icon AWT, Swing, JavaFX & SWT 3
S Beim Painten auf JPanel verschwindet das Bild :( AWT, Swing, JavaFX & SWT 10
Iron Monkey SwingWorker verschwindet nicht AWT, Swing, JavaFX & SWT 10
O JPanel Zeichnung verschwindet AWT, Swing, JavaFX & SWT 4
F Zeichnung verschwindet bei Nutzung von einem Layout AWT, Swing, JavaFX & SWT 6
R JTable Headerbeschriftung verschwindet AWT, Swing, JavaFX & SWT 3
Dit_ Zeilenmarkierung verschwindet nach repaint() AWT, Swing, JavaFX & SWT 12
R Panel verschwindet AWT, Swing, JavaFX & SWT 2
P JTextArea text verschwindet bei mausklick AWT, Swing, JavaFX & SWT 5
R Bei JDialog verschwindet der Inhalt aus übergeordneten Frame AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben