Avatar billede stig-ole Nybegynder
21. oktober 2004 - 15:35 Der er 10 kommentarer og
1 løsning

Menu'en forsvinder

Hej,
Jeg har et problem med, at menuen forsvinder for mig, og det er temmelig irreterende. Det sker når jeg gør følgende:
Jeg klikker på menuen "andre-kartoteker", flytter musen ned på "Garanti" og klikker der. Det virker fint (normalt de 2 første gange).
Derefter gør jeg følgende: klikker på menuen "andre-kartoteker", så komme under-menu'en frem hvor der står "Garanti", men når jeg flytter musen ned på "Garanti", så forsvinder der hvor der står "Garanti". Hvis man så flytter musen op på "andre-kartoteker" uden at klikke, så kommer menu'en frem igen.
Det synes jeg er temmelig irreterende i længden, er der nogle der kan hjælpe mig?

Koden:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class GUIMain
{
    public static void main (String[] arg)
    {
        HovedmenuFrame hMenu = HovedmenuFrame.getTheInstance("Hovedmenu");  //opretter menu-billedet
        hMenu.show();  //viser munu-billedet
    }
}

class HovedmenuFrame extends JFrame
{
    //menu-"knapper"
    private JMenuItem afslutMenuItem;
    private JMenuItem garantiMenuItem;

    private static HovedmenuFrame theInstance;
   
    public HovedmenuFrame(String cap)
    {
        super(cap);
       
        //sætter størrelsen
        final int DEFAULT_FRAME_WIDTH = 600;
        final int DEFAULT_FRAME_HEIGHT = 450;
        setSize(DEFAULT_FRAME_WIDTH, DEFAULT_FRAME_HEIGHT);
        setResizable(false);

        addWindowListener(new WindowCloser());

        initGUI();
    }

    public static HovedmenuFrame getTheInstance(String cap)
    {
        if(theInstance == null)
        {
            theInstance = new HovedmenuFrame(cap);
        }
        return theInstance;
    }

    private void initGUI()
    {
        //laver en menubar
        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);
       
        MenuListener listener = new MenuListener();

        //laver en tilbud-menu
        JMenu fasteOplysningerMenu = new JMenu("Andre-kartoteker");
        menuBar.add(fasteOplysningerMenu);

        garantiMenuItem = new JMenuItem("Garanti");
        fasteOplysningerMenu.add(garantiMenuItem);
        garantiMenuItem.addActionListener(listener);

        JMenu afslutMenu = new JMenu("Afslut");
        menuBar.add(afslutMenu);
       
        afslutMenuItem = new JMenuItem("Afslut");
        afslutMenu.add(afslutMenuItem);
        afslutMenuItem.addActionListener(listener);
    }

    private class MenuListener implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
            // find the menu that was selected
           
            Object source = event.getSource();
           
            //hvor programmet går hen ved tryk på en menu-"knap"
            if (source == afslutMenuItem)
            {
                System.exit(0);
            }
            else if (source == garantiMenuItem)
            {
                GarantiBeskrivelseFrame garantiBeskrivelseFrame = GarantiBeskrivelseFrame.getTheInstance(theInstance, "Garantioplysninger");
                garantiBeskrivelseFrame.show();
            }
        }
    }

    private class WindowCloser extends WindowAdapter
    {
        public void windowClosing(WindowEvent event)
        {
            System.exit(0);
        }
    }
}

class GarantiBeskrivelseFrame extends JDialog
{
    private Button okButton = new Button();

    private static GarantiBeskrivelseFrame theInstance;

    private GarantiBeskrivelseFrame(JFrame owner, String cap)
    {
        super(owner, cap, true);

        initGUI();

          addWindowListener(new WindowCloser());

        okButton.addActionListener(new OkListener());
    }

    public static GarantiBeskrivelseFrame getTheInstance(JFrame owner, String cap)
    {
        if(theInstance == null)
        {
            theInstance = new GarantiBeskrivelseFrame(owner, cap);
        }
        return theInstance;
    }

    class OkListener implements ActionListener  //ved klik på Opret-knappen
    {
        public void actionPerformed(ActionEvent e)
        {
            theInstance=null;
            dispose();
        }
    }

    private void initGUI()
    {
        setBounds(new java.awt.Rectangle(0, 0, 400, 421));
        setResizable(false);
        getContentPane().setLayout(null);
        getContentPane().add(okButton);
    }

    private class WindowCloser extends WindowAdapter
    {
        public void windowClosing(WindowEvent event)
        {
        }
    }
}
Avatar billede _carsten Nybegynder
21. oktober 2004 - 21:13 #1
Som jeg ser det er der ikke noget idin kode som vil give fejl i den retning.

Dog er der;     
  private GarantiBeskrivelseFrame(JFrame owner, String cap)
  {
    super(owner, cap, true);

En JDialog tager en java.awt.Frame og ikke en javax.swing.JFrame som parameter


Den løser du bedst på følgende måde
  private GarantiBeskrivelseFrame(JFrame owner, String cap)
  {
    .........
    .......


      GarantiBeskrivelseFrame garantiBeskrivelseFrame =
          GarantiBeskrivelseFrame.getTheInstance(JOptionPane.getFrameForComponent( this )),

Hvis du stadig har problemet, ligger fejlen et andet sted.
Avatar billede _carsten Nybegynder
21. oktober 2004 - 21:14 #2
copy/paste problem

Sådan
  private GarantiBeskrivelseFrame( Frame owner, String cap)
  {
    .........
    .......
Avatar billede stig-ole Nybegynder
21. oktober 2004 - 21:39 #3
Det løste ikke problemet, sorry...
Avatar billede _carsten Nybegynder
21. oktober 2004 - 21:45 #4
Nej - det ville overraske mig meget hvis det gjorde.

Men du må have mere kode end det, for det er noget andet som forårsager det,
har du eventuelt i samme folder/package en klasse som hedder JFrame
Avatar billede stig-ole Nybegynder
21. oktober 2004 - 21:50 #5
Jeg har lavet en testcase med kun den java-fil, som indeholder det kode.
Avatar billede _carsten Nybegynder
21. oktober 2004 - 21:51 #6
Prøv at slette alle *.class filer i det directory og så kompile java-filen igen
Avatar billede _carsten Nybegynder
21. oktober 2004 - 22:14 #7
Jeg har nu testet din kode og jeg kan ikke få den til at vise den fejl !!
Avatar billede stig-ole Nybegynder
21. oktober 2004 - 22:33 #8
Jeg har slettet alle class-filer.
Den laver stadig den fejl hos mig, så ved ikke hvor forskellen er. Kan det have noget med hvilkan Java-version man kører (1.4.2_04)
Avatar billede _carsten Nybegynder
21. oktober 2004 - 22:42 #9
Det skulle ikke give problemer i 1.4.2_04, bruger dog selv 5.0

http://java.sun.com/j2se/1.5.0/download.jsp
Avatar billede stig-ole Nybegynder
22. oktober 2004 - 09:47 #10
Kan du ikke sende mig alt koden, som du har skrevet/ændret?
Avatar billede stig-ole Nybegynder
22. oktober 2004 - 13:14 #11
Det virker med java 1.5..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester