JMenuBar

Status
Niet open voor verdere reacties.

Warranty

Gebruiker
Lid geworden
3 nov 2006
Berichten
100
Code:
package test;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.awt.print.*;

public class Frame1 extends JFrame {
    JPanel contentPane;
    BorderLayout borderLayout1 = new BorderLayout();
    
    Frame1 frame = new Frame1();
    
    JMenuBar menuBar;
    JMenu menu, submenu;
    JMenuItem menuItem;

    public Frame1() {
        try {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            jbInit();
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

    private void jbInit() throws Exception {
        contentPane = (JPanel) getContentPane();
        contentPane.setLayout( null );
        setSize(new Dimension(600, 500));
        setTitle("Main");
        
        menuBar = new JMenuBar();
        
//Build the first menu.
        menu = new JMenu("A Menu");
        menu.setMnemonic(KeyEvent.VK_A);
        menu.getAccessibleContext().setAccessibleDescription(
                "The only menu in this program that has menu items");
        menuBar.add(menu);
        
//a group of JMenuItems
        menuItem = new JMenuItem("A text-only menu item",
                                 KeyEvent.VK_T);
        menu.add(menuItem);
        
        frame.setJMenuBar(menuBar);
        
    }
}

Waarom werkt deze code niet? Het lijkt iets te maken te hebben met het stukje frame.setJMenuBar(menuBar); of met het stukje Frame1 frame = new Frame1();

Als ik die 2 comment dan doet hij het wel alleen laat hij de menubar niet zien in de frame. Wat doe ik fout? :confused:
 
Maak van dit:
frame.setJMenuBar(menuBar);
eens dit:
this.setJMenuBar(menuBar);


Je werkt in de klasse JFrame1, welke overerft van JFrame. Dit is dus al een Frame. Waarom zou je dan een nieuwe instantie van die klasse in dezelfde klasse aanmaken?

Daar komt bij kijken dat je verder in je code _nergens_ "frame." gebruikt, alleen bij de JMenuBar.

Je kan de variabele frame dus gewoon weggooien, omdat deze klasse (Frame1) al een JFrame is. Je hoeft er dus niet nog een nieuwe instantie van te maken in deze klasse.
 
Awww hij doet het! Geweldig! Dus wat zegt dat dan? Is "this" een functie om whatever toe te voegen aan "deze" frame?
 
Kleine correctie: met "this" roep je het object van de huidige klasse aan. Maar het idee is wel duidelijk. :thumb:

Juist. Kon het niet echt goed omschrijven; tis er bij mij een paar jaar geleden ingebakken en het is nu bijna standaard geworden :D
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan