[Java] Krijg menubar niet geremoved

Pagina: 1
Acties:

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ik wil mijn menubar die ik heb aangemaakt removen, zodat hij opnieuw aangemaakt kan worden of een update.

Ik heb al met removeAll en remove geprobeerd. Ook zo'n andere functie die eigenlijk controleerd of er iets is veranderd geprobeerd, maar alles tevergeefs.

Wat ik in het vorige topic vroeg betreffende waardes vanuit een JDialog teruggeven is inmiddels wel gelukt. Maar nu krijg ik mijn menubar niet terug.

De container waar de menubar in zit wilde ik verwijderen maar dat lukte niet en de als ik de menubar zelf verwijder krijg ik ook niks voor elkaar.

Waarschijnlijk ergens een foutje, maar waar?

  • Denker
  • Registratie: Maart 2003
  • Laatst online: 07-04 10:37
Als je een stuk relevante code post, kunnen we daar wat meer mee...

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:29

Robtimus

me Robtimus no like you

JFrame.setJMenuBar(null) werkt niet? Of meteen met de nieuwe waarde?

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
// hier stond code, deze is nu verplaatst naar verderop

[ Voor 99% gewijzigd door BSeB op 02-11-2004 22:41 ]


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
IceManX schreef op 02 november 2004 @ 13:22:
JFrame.setJMenuBar(null) werkt niet? Of meteen met de nieuwe waarde?
Dit zorgd idd niet voor het gewenste resultaat. Zeker niet als ik daarna probeer een neiuwe menubar in te voegen.

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 01-05 13:23
En als je nu gewoon eens een nieuwe menubar aanmaakt en deze dan invoegt ipv null?
En voor update van je scherm: repaint?

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
public void doIt(int versies)
    {
      versie = versies;
            System.out.println(versie);
      MenuBar demo1 = new MenuBar();
            JMenuBar MenuBalk1 = demo1.createMenuBar(versies);
            frame.setJMenuBar(MenuBalk1);
            frame.repaint();

            //MenuBar.remove(menuBar);

            //revalidate.demo.createMenuBar(versies);
    }


dan krijg ik op de plaats waar de oude menubar zat een grijze balk en geen nieuwe menubar!

Verwijderd

Probeer eerst de keuze te maken of je AWT of SWING wilt gebruiken.
Ik zie hier nu in je code zowel MenuBar (AWT) als JMenuBar(SWING) staan.

Waarom creeër je niet direct een JMenuBar en loop je eerst te rotzooien met een MenuBar?

Het is naar mijn weten niet mogelijk of iig niet verstandig om AWT bovenop SWING te gebruiken i.v.m. light en heavy weight componenten

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Maar je moet toch nog menu items toevoegen aan je menubar? Een grijze balk is gewoon een leeg menu lijkt me.

En ik vraag me ook af waarom je twee keer een menu aanmaakt. Eerst met new MenuBar en daarna met createMenuBar.

En ik vraag me af of die grote lap die je opstuurde uberhaupt wel compileert, want ik heb de documentatie van J1.4.2 zitten doorspitten en het MenuBar component heeft geen createMenuBar method, voor zover ik kan zien. Ook in 1.5.0 zit ie niet.

edit:
Ik had natuurlijk ff kunnen Googlen en dan had ik gezien dat het Eclipse specifieke zaken zijn

[ Voor 12% gewijzigd door bigbeng op 02-11-2004 17:13 ]


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
bigbeng schreef op 02 november 2004 @ 17:09:
Maar je moet toch nog menu items toevoegen aan je menubar? Een grijze balk is gewoon een leeg menu lijkt me.

En ik vraag me ook af waarom je twee keer een menu aanmaakt. Eerst met new MenuBar en daarna met createMenuBar.

En ik vraag me af of die grote lap die je opstuurde uberhaupt wel compileert, want ik heb de documentatie van J1.4.2 zitten doorspitten en het MenuBar component heeft geen createMenuBar method, voor zover ik kan zien. Ook in 1.5.0 zit ie niet.

edit:
Ik had natuurlijk ff kunnen Googlen en dan had ik gezien dat het Eclipse specifieke zaken zijn
Createmenubar is gewoon mijn method waarin ik de menubar aanmaak.

En waar ik dus een variabele aan kan meegeven.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Dus als ik het goed begrijp het jij een class MenuBar aangemaakt? Dat is niet zo'n handige naam voor een class, want die bestaat al in AWT. Dat is op zich geen probleem, maar voor mij als meelezer wel, als je het er niet bijvertelt. :)

Kun je de code daarvan ook even posten?

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:29

Robtimus

me Robtimus no like you

bigbeng schreef op 02 november 2004 @ 21:27:
Dus als ik het goed begrijp het jij een class MenuBar aangemaakt? Dat is niet zo'n handige naam voor een class, want die bestaat al in AWT. Dat is op zich geen probleem, maar voor mij als meelezer wel, als je het er niet bijvertelt. :)
offtopic:
Dan ben je gek op mijn FileFilter class:
Java:
1
2
public class FileFilter extends javax.swing.filechooser.FileFilter
                        implements java.io.FileFilter
})

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Dit is de code van de menubar!

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import java.awt.*;
import java.awt.event.*;

import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.KeyStroke;

public class MenuBar extends Application
{
  public JMenuBar createMenuBar(int versie)
    {
    JMenuBar menuBar;
    JMenu menu;
    JMenuItem menuItem;

    //Create the menu bar.
    menuBar = new JMenuBar();

        if (versie==0)
        {
          //Build the first menu.
      menu = new JMenu("Bestand");
      menu.setMnemonic(KeyEvent.VK_B);
      menu.getAccessibleContext().setAccessibleDescription("blaat");
      menuBar.add(menu);
  
      //a group of JMenuItems
      menuItem = new JMenuItem("Inloggen");
      menuItem.setMnemonic(KeyEvent.VK_I);
      menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, ActionEvent.ALT_MASK));
      menuItem.setActionCommand("inloggen");
      menuItem.addActionListener(this);
      menu.add(menuItem);
  
      menuItem = new JMenuItem("Exit");
      menuItem.setMnemonic(KeyEvent.VK_X);
      menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, ActionEvent.ALT_MASK));
      menuItem.setActionCommand("quit");
      menuItem.addActionListener(this);
      menu.add(menuItem);
    }
    if (versie==1)
        {
          //Build the first menu.
      menu = new JMenu("Bestand");
      menu.setMnemonic(KeyEvent.VK_B);
      menu.getAccessibleContext().setAccessibleDescription("blaat");
      menuBar.add(menu);
  
      //a group of JMenuItems
      menuItem = new JMenuItem("Inloggen");
      menuItem.setMnemonic(KeyEvent.VK_I);
      menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, ActionEvent.ALT_MASK));
      menuItem.setActionCommand("inloggen");
      menuItem.addActionListener(this);
      menu.add(menuItem);
  
      menuItem = new JMenuItem("Exit");
      menuItem.setMnemonic(KeyEvent.VK_X);
      menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, ActionEvent.ALT_MASK));
      menuItem.setActionCommand("quit");
      menuItem.addActionListener(this);
      menu.add(menuItem);
    }

    return menuBar;
  }
}


Dit is de actuele test-code van de class waarmee ik de menubar wil vernieuwen:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.accessibility.*;
import java.awt.Container;

import javax.swing.JPanel;
import javax.swing.JFrame;

public class Application extends JFrame implements ActionListener
{
    final static String LOOKANDFEEL = "auto";
    static int versie;
    static JFrame frame;

        public void doIt(int versie1)
    {
      versie = versie1;
            System.out.println(versie);
            MenuBar demo1 = new MenuBar(); 
      JMenuBar MenuBalk1 = demo1.createMenuBar(versie);
      frame.setJMenuBar(MenuBalk1);
      frame.repaint();
    }

        public Container createContentPane()
        {
        //Create the content-pane-to-be.
        JPanel contentPane = new JPanel(new BorderLayout());
        contentPane.setOpaque(true);

        return contentPane;
    }
    public void actionPerformed(ActionEvent e)
      {
      if ("inloggen".equals(e.getActionCommand()))
          {
            LoginNew login = new LoginNew(this);
                login.inloggen();
      }
            else
            {
      }
    }

         /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void initLookAndFeel()
        {
          String lookAndFeel = null;

      if (LOOKANDFEEL != null)
        {
            if (LOOKANDFEEL.equals("auto"))
            { //new in 1.4.2
              lookAndFeel = UIManager.getSystemLookAndFeelClassName();
                }
            else
            {
                System.err.println("Unexpected value of LOOKANDFEEL specified: " + LOOKANDFEEL);
            lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();
            }
            try
            {
                UIManager.setLookAndFeel(lookAndFeel);
            }
            catch (ClassNotFoundException e)
            {
                System.err.println("Couldn't find class for specified look and feel:" + lookAndFeel);
            System.err.println("Did you include the L&F library in the class path?");
            System.err.println("Using the default look and feel.");
            }
            catch (UnsupportedLookAndFeelException e)
            {
              System.err.println("Can't use the specified look and feel (" + lookAndFeel + ") on this platform.");
          System.err.println("Using the default look and feel.");
            }
            catch (Exception e)
            {
                System.err.println("Couldn't get specified look and feel (" + lookAndFeel + "), for some reason.");
            System.err.println("Using the default look and feel.");
            e.printStackTrace();
            }
        }
    }

        private static void createAndShowGUI()
        {
      //Set the look and feel.
      initLookAndFeel();

      //Make sure we have nice \ decorations.
      JFrame.setDefaultLookAndFeelDecorated(true);

      //Create and set up the window.
      frame = new JFrame("SAB Systems");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      //Create and set up the content pane.
      MenuBar demo = new MenuBar();

            versie = 0;
            frame.setJMenuBar(demo.createMenuBar(versie));
      frame.setContentPane(demo.createContentPane());

      //Venster positioneren
      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

      //Display the window.
      frame.setSize(screenSize.width, screenSize.height);
      frame.setVisible(true);
    }
    
        public static void main(String Args[])
        {

            //final Connection verbinding = conn;
            //Schedule a job for the event-dispatching thread:
      //creating and showing this application's GUI.
      javax.swing.SwingUtilities.invokeLater(new Runnable()
            {
              public void run()
                {
                  createAndShowGUI();
        }
      });
    }
}

  • momania
  • Registratie: Mei 2000
  • Laatst online: 20:58

momania

iPhone 30! Bam!

Java:
1
public class MenuBar extends Application 

Waarom extend je in gods naam Application, die op zijn beurt weer JFrame extend :?

De class die je nu gebruikt om je menu te maken heeft toch helemaal niks nodig van je Application of JFrame?

Het aanmaken van je menu zou je net zo goed in een aparte method in je Application kunnen onderbrengen. Dat scheelt sowieso weer een nutteloze class aanmaken ;)

Gebruikt verder ipv
Java:
1
2
3
4
5
6
if (versie == 0) {

}
if (versie ==1) {

}

liever:
Java:
1
2
3
4
5
6
if (versie == 0) {

}
else if (versie == 1) {

}

en nog beter:
Java:
1
2
3
4
5
6
7
8
9
10
switch (versie) {
  case 1:
    // code hier
    break;
  case 2:
    // andere code
    break;
  default:
    // vang hier een onbekende code af
}


Verder extend je Application class een JFrame, maar maak je in je Application class toch een nieuwe instantie van JFrame aan...
Je Application class zou een contructor moeten hebben die aangeroepen wordt vanuit de main method en vanuit daar ga je methods aanroepen die je GUI initialiseren.
Dan hoef je tenminste ook niet al je methods static te maken...

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Application extends JFrame implements ActionListener  {

  public Application() {
    // contructor
    // roep hier en init methode aan die zorgt dat de GUI gemaakt wordt etc.
  }
  public static void main(String[] args) {
    // Maak jezelf als nieuwe class aan
    Application app = new Application();
  }

  // etc...
}


Als laatste:
Om je menubar te vervangen, moet je volgens mij niet de repaint aanroepen van het frame, maar de validate().. ( of de pack() ) method. :)

Samenvattend:
Je hebt nog een _hoop_ te leren over programmeren in JAVA en daarbij is het niet verstandig om direct met GUI's aan de slag te gaan. Een GUI maken is vaak wel een vak apart en kost veel moeite qua coding, zeker als je het helemaal handmatig wilt doen. Wil je dit goed kunnen doen, moet je toch zeker wel weten hoe je je code moet opzetten en structureren en dat heb jij duidelijk nog niet onder de knie ;)

Neem je whisky mee, is het te weinig... *zucht*


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Heb je helemaal gelijk in, volleerd ben ik niet, maar heb er wel plezier in en dat vind ik ook wel belangrijk.

Het is nu overigens gelukt, ik heb mijn menubar. Repaint was inderdaad niet juist. Het moest Validate() zijn.

Het werkt nu helemaal perfect.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
momania schreef op 02 november 2004 @ 23:32:
liever:
Java:
1
2
3
4
5
6
if (versie == 0) {

}
else if (versie == 1) {

}

en nog beter:
Java:
1
2
3
4
5
6
7
8
9
10
switch (versie) {
  case 1:
    // code hier
    break;
  case 2:
    // andere code
    break;
  default:
    // vang hier een onbekende code af
}
Gebruik nog liever polymorphisme hier. Dit is typisch iets wat daarmee uitgedrukt kan worden, hoewel ik niet veel verschil zie tussen de twee gecreerde Menubars
Pagina: 1