views:

196

answers:

2

Im trying to use the following code to eventually make a game. The code, as shown below, works.

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



public class GUI extends JFrame implements ActionListener
{
 public static void main(String[] args)
 {
  GUI g = new GUI();
 }
 public GUI()
    {
  try
  {
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  } catch (Exception e)
  {
   e.printStackTrace();
  } 
  setSize(500,500);
  setDefaultCloseOperation(EXIT_ON_CLOSE);
  setJMenuBar(createMenuBar());
  setVisible(true);
    }
 public JMenuBar createMenuBar()
    {
  JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        fileMenu.setMnemonic(KeyEvent.VK_F);
        JMenuItem save = new JMenuItem("Save");
        save.setMnemonic(KeyEvent.VK_S);
        save.addActionListener(this);
        JMenuItem load = new JMenuItem("Load");
        load.setMnemonic(KeyEvent.VK_L);
        load.addActionListener(this);
        JMenuItem quit = new JMenuItem("Quit");
        quit.setMnemonic(KeyEvent.VK_Q);
        quit.addActionListener(this);
        fileMenu.add(save);
        fileMenu.add(load);
        fileMenu.addSeparator();
        fileMenu.add(quit);
        JMenu editMenu = new JMenu("Edit");
        editMenu.setMnemonic(KeyEvent.VK_E);
        JMenuItem undo = new JMenuItem("Undo");
        undo.setMnemonic(KeyEvent.VK_U);
        undo.addActionListener(this);
        JMenuItem redo = new JMenuItem("Redo");
        redo.setMnemonic(KeyEvent.VK_R);
        redo.addActionListener(this);
        editMenu.add(undo);
        editMenu.add(redo);
        JMenu helpMenu = new JMenu("Help");
        helpMenu.setMnemonic(KeyEvent.VK_H);
        JMenuItem controls = new JMenuItem("Controls");
        controls.setMnemonic(KeyEvent.VK_C);
        controls.addActionListener(this);
        JMenuItem about = new JMenuItem("About");
        about.setMnemonic(KeyEvent.VK_A);
        about.addActionListener(this);
        helpMenu.add(controls);
        helpMenu.addSeparator();
        helpMenu.add(about);
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        return menuBar;
    }
 public void actionPerformed(ActionEvent e)
 {
  System.out.println(e.getActionCommand());
 }
}

However, if you were to put a paint method in it, as shown below, it stops showing the JMenuBar.

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



public class GUI extends JFrame implements ActionListener
{
 public static void main(String[] args)
 {
  GUI g = new GUI();
 }
 public GUI()
    {
  try
  {
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  } catch (Exception e)
  {
   e.printStackTrace();
  } 
  setSize(500,500);
  setDefaultCloseOperation(EXIT_ON_CLOSE);
  setJMenuBar(createMenuBar());
  setVisible(true);
    }
 public JMenuBar createMenuBar()
    {
  JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        fileMenu.setMnemonic(KeyEvent.VK_F);
        JMenuItem save = new JMenuItem("Save");
        save.setMnemonic(KeyEvent.VK_S);
        save.addActionListener(this);
        JMenuItem load = new JMenuItem("Load");
        load.setMnemonic(KeyEvent.VK_L);
        load.addActionListener(this);
        JMenuItem quit = new JMenuItem("Quit");
        quit.setMnemonic(KeyEvent.VK_Q);
        quit.addActionListener(this);
        fileMenu.add(save);
        fileMenu.add(load);
        fileMenu.addSeparator();
        fileMenu.add(quit);
        JMenu editMenu = new JMenu("Edit");
        editMenu.setMnemonic(KeyEvent.VK_E);
        JMenuItem undo = new JMenuItem("Undo");
        undo.setMnemonic(KeyEvent.VK_U);
        undo.addActionListener(this);
        JMenuItem redo = new JMenuItem("Redo");
        redo.setMnemonic(KeyEvent.VK_R);
        redo.addActionListener(this);
        editMenu.add(undo);
        editMenu.add(redo);
        JMenu helpMenu = new JMenu("Help");
        helpMenu.setMnemonic(KeyEvent.VK_H);
        JMenuItem controls = new JMenuItem("Controls");
        controls.setMnemonic(KeyEvent.VK_C);
        controls.addActionListener(this);
        JMenuItem about = new JMenuItem("About");
        about.setMnemonic(KeyEvent.VK_A);
        about.addActionListener(this);
        helpMenu.add(controls);
        helpMenu.addSeparator();
        helpMenu.add(about);
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        return menuBar;
    }
    public void paint(Graphics g)
    {
    }
 public void actionPerformed(ActionEvent e)
 {
  System.out.println(e.getActionCommand());
 }
}

Im not even kidding. Please help

A: 

The components you've added to the JFrame are themselves painted in the JFrame's paint method.

You want to call the base class's paint method from your own one, before doing any of your own painting.

Anon.
+2  A: 

Component.paint is responsible for drawing the component. In this case, the entire JFrame.

By overriding paint(Graphics g), but not called super.paint(g) from within it, you've stopped all rendering into the JFrame.

Just add super.paint(g) to your paint method and that should fix it.

Kevin Montrose
can i add the super.paint method to my constructor, or do i have to put it in the paint method
resotpvl
In the paint method.
Kevin Montrose