Buttons erscheinen erst bei Mouse-Over

MK234

Aktives Mitglied
Hallo,
bei meinem folgenden Programm erscheinen die Buttons erst wenn ich mit der Mouse darüberfahre.
Wenn ich statt "startFen.add(panel1, BorderLayout.NORTH);"
das BorderLayout.SOUTH nehme, also "startFen.add(panel1, BorderLayout.SOUTH);"
erscheinen die Buttons sofort.

Ich möchte aber die Buttons lieber NORTH platzieren.

Woran könnte das liegen.


Vielen Dank.


Java:
import java.awt.*;
import java.awt.Container;
import java.awt.event.*;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.JFrame;

/**
 * @author mk
 */
public class StartWindow2 implements ActionListener  {
    
    JFrame startFen;
    Container container;
    
    JMenuBar menüLeiste;
    JMenu Spiel;
    JMenu Überläufe;
    JMenu Hilfe;
    
    JMenuItem neuesSpiel;
    JMenuItem spielLaden;
    JMenuItem spielBeenden;
    JMenuItem progrBeenden;
    
    JMenuItem proFeld;
    JMenuItem proStufe;
    JMenuItem komplett;
    
    JMenuItem spielReg;
    JMenuItem bedienung;
    JMenuItem netzwerkLog;
    
    JPanel panel1;
    
    JButton neuSpButton;
    JButton beendButton;
    JButton exitButton;
    
    public StartWindow2 () {
        startFen = new JFrame();
        container = startFen.getContentPane();
        
        //Menüleiste erzeugen
        menüLeiste = new JMenuBar();
        
        //Menüelemente erzeugen
        Spiel = new JMenu("Spiel");
        Überläufe = new JMenu("Überläufe");
        Hilfe = new JMenu("Hilfe");
        
        //Untermenüelemente erzeugen
        neuesSpiel = new JMenuItem("Neues Spiel");
        neuesSpiel.addActionListener(this);   
        spielLaden = new JMenuItem("Spiel aus Datei laden");
        spielLaden.addActionListener(this);
        spielBeenden = new JMenuItem("Spiel beenden");
        spielBeenden.addActionListener(this);        
        progrBeenden = new JMenuItem("Programm beenden");
        progrBeenden.addActionListener(this);        
        proFeld = new JMenuItem("pro Feld");
        proFeld.addActionListener(this);        
        proStufe = new JMenuItem("pro Stufe");
        proStufe.addActionListener(this);        
        komplett = new JMenuItem("komplett");
        komplett.addActionListener(this);        
        spielReg = new JMenuItem("Spielregeln");
        spielReg.addActionListener(this);        
        bedienung = new JMenuItem("Bedienungsanleitung");
        bedienung.addActionListener(this);        
        netzwerkLog = new JMenuItem("Netzwerk log");
        netzwerkLog.addActionListener(this);
        
        //Menüelemente hinzufügen
        menüLeiste.add(Spiel);
        menüLeiste.add(Überläufe);
        menüLeiste.add(Hilfe);
        
        Spiel.add(neuesSpiel);
        Spiel.add(spielLaden);
        Spiel.add(spielBeenden);
        Spiel.add(progrBeenden);
        Überläufe.add(proFeld);
        Überläufe.add(proStufe);
        Überläufe.add(komplett);
        Hilfe.add(spielReg);
        Hilfe.add(bedienung);
        Hilfe.add(netzwerkLog);
        
        startFen.add(menüLeiste, BorderLayout.NORTH);
        startFen.setSize(500, 600);
        startFen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        startFen.setVisible(true);    
        
        panel1= new JPanel(new GridLayout(1,3));
        
        neuSpButton = new JButton("Neues Spiel");
        neuSpButton.addActionListener(this);        
        beendButton = new JButton("Spiel beenden");
        beendButton.addActionListener(this);        
        exitButton = new JButton ("Programm beenden");
        exitButton.addActionListener(this);        
        panel1.add(neuSpButton, 0);
        panel1.add(beendButton, 1);
        panel1.add(exitButton, 2);
        
        startFen.add(panel1, BorderLayout.NORTH);     
        
    }
    
    public void actionPerformed(ActionEvent event) {
        if (event.getSource() == neuesSpiel) {
            System.out.println("Neues Spiel");
        }
        if(event.getSource() == spielLaden) {
            System.out.println("Spiel aus Datei laden");
        }
        if(event.getSource() == spielBeenden) {
            System.out.println("Spiel wurde beendet");
        }
        if(event.getSource() == progrBeenden) {
            System.out.println("Program wurde beendet");
        }
        if(event.getSource() ==  proFeld) {
            System.out.println("pro Feld");
        }
        if(event.getSource() == proStufe) {
            System.out.println("pro Stufe");
        }
        if(event.getSource() == komplett) {
            System.out.println("komplett");
        }
        if(event.getSource() == spielReg) {
            System.out.println("Spielregeln");
        }
        if(event.getSource() == bedienung) {
            System.out.println("Bedienung");
        }
        if(event.getSource() == netzwerkLog) {
            System.out.println("Netzwerk log");
        }
        if(event.getSource() == neuSpButton) {
            System.out.println("Neues Spiel");
        }
        if(event.getSource() == beendButton) {
            System.out.println("Spiel beenden");
        }
        if(event.getSource() == exitButton) {
            System.out.println("Programm beenden");
        }
    }   
   
}
 
Zuletzt bearbeitet von einem Moderator:
Das

icon4.gif
Java™ Quelltext ist bitte in
Java:
-Tags zu schreiben: [code=Java]hier Java Code einfügen[/ JAVA][/COLOR][/SIZE]

scheint schwer zu übersehen zu sein :D

Zu deinem Code:

[code]startFen.setVisible(true);
mal versuchen ans Ende/als letzte Zeile vom Konstruktor zu packen
 
Zu schiebst zuerst die 'menüLeiste' nach NORTH
und überschreibst diese dann in Zeile 109,
wo Du den 'panel1' hinzufügst.


Code:
Zeile 92: startFen.add(menüLeiste, BorderLayout.NORTH);
...
Zeile 109: startFen.add(panel1, BorderLayout.NORTH);

Aber mal was Anderes: Wieso weist Du die JMenuBar nicht
einfach dem JFrame zu. Mit JFrame.setJMenuBar() ?

;-)


VG ROlf
 
das scheint es doch nicht ganz gewesen zu sein,

Die Buttons erscheinen zwar sofort, aber dafür wird meine Menüleiste von den Buttons überdeckt
 
JFrame besitzt eine Methode setJMenuBar(JMenuBar) um die JMenuBar "konfliktfrei" zu platzieren.
Grundsätzlich kann JFrame nur eine Komponente pro Bereich halten.
Und bereits erwähnt wurde ja das setVisible(true) erst zum Schluss (nachdem das Layout steht) aufzurufen.
 
habe das setMenuBar(menüLeiste) angewandt, funktioniert leider nicht in meinem Programm.
Die Menüleiste wird nach wie vor von den Buttons überschrieben.

Habe setMenuBar wie folgt eingesetzt:

Java:
        //Menüelemente hinzufügen
        menüLeiste.add(Spiel);
        menüLeiste.add(Überläufe);
        menüLeiste.add(Hilfe);
        setJMenuBar(menüLeiste);
       
        
        Spiel.add(neuesSpiel);
        Spiel.add(spielLaden);
        Spiel.add(spielBeenden);
        Spiel.add(progrBeenden);
        Überläufe.add(proFeld);
        Überläufe.add(proStufe);
        Überläufe.add(komplett);
        Hilfe.add(spielReg);
        Hilfe.add(bedienung);
        Hilfe.add(netzwerkLog);
        
        startFen.add(menüLeiste, BorderLayout.NORTH);
        startFen.setSize(500, 600);
        startFen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       
        
        panel1= new JPanel(new GridLayout(1,3));
        panel2 = new JPanel(new GridLayout(4, 1));
        
        neuSpButton = new JButton("Neues Spiel");
        neuSpButton.addActionListener(this);        
        beendButton = new JButton("Spiel beenden");
        beendButton.addActionListener(this);        
        exitButton = new JButton ("Programm beenden");
        exitButton.addActionListener(this); 
        manuButton = new JButton("manuell");
        manuButton.addActionListener(this);
        autoButton = new JButton("automatisch");
        autoButton.addActionListener(this);
        leerButton = new JButton("Leertaste");
        leerButton.addActionListener(this);
        slider = new JSlider(JSlider.HORIZONTAL, 2, 8, 3);
        slider.addChangeListener(this);
        slider.setBorder(BorderFactory.createTitledBorder(
                BorderFactory.createLineBorder(Color.WHITE, 1), "Pause"));
        
        panel1.add(neuSpButton, 0);
        panel1.add(beendButton, 1);
        panel1.add(exitButton, 2);
        panel2.add(manuButton, 0);
        panel2.add(autoButton, 1);
        panel2.add(leerButton, 2);
        panel2.add(slider, 3);
      
        
        startFen.add(panel1, BorderLayout.NORTH);
        startFen.add(panel2, BorderLayout.SOUTH);
        startFen.setVisible(true);
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben