为什么我的菜单栏不会弹出我的显示窗口?

时间:2010-12-11 23:48:56

标签: java swing menu

我正在尝试写一个由U.F.O组成的小游戏。它飞向各个方向(基于按钮)并在它触及屏幕底部时爆炸。我有4个班级,其中2个我不允许编辑。他们是:

显示窗口

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

public  class DisplayWindow extends JFrame{

  private Container c;

  public DisplayWindow(){
    super("Display");
    c = this.getContentPane();
  }

  public void addPanel(JPanel p){
    c.add(p);
  }

  public void showFrame(){
    this.pack();
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

不明飞行物的驱动程序。

import javax.swing.*;

public class SaucerDriver{

  public static void main(String[] args){
    DisplayWindow d = new DisplayWindow();
    JMenuBar menuBar = new JMenuBar();
    d.setJMenuBar(menuBar);
    SaucerPanel p = new SaucerPanel(menuBar);
    d.addPanel(p);
    d.showFrame();
  }
}

我正在尝试添加一个菜单栏,但它不会显示出来。我做错了什么?

这是我的班级,用于绘制所有建筑物以及诸如此类

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

public class SaucerPanel extends JPanel implements ActionListener{
  JButton quitButton;
  JButton upButton;
  JButton leftButton;
  JButton rightButton;
  JButton downButton;  
  int xLoc;
  int yLoc;
  boolean explode;

  public SaucerPanel(JMenuBar menuBar){
    xLoc = 20;
    yLoc = 200;

    explode = false;

    this.setPreferredSize(new Dimension(850,500));
    this.setBackground(Color.white);
    quitButton = new JButton("Quit");
    this.add(quitButton);
    quitButton.addActionListener(this);

    downButton = new JButton("Down");
    this.add(downButton);
    downButton.addActionListener(this);

    upButton = new JButton("Up");
    this.add(upButton);
    upButton.addActionListener(this);

    leftButton = new JButton("Left");
    this.add(leftButton);
    leftButton.addActionListener(this);

    rightButton = new JButton("Right");
    this.add(rightButton);
    rightButton.addActionListener(this);
  }

  public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.setColor(Color.green);
    g.fillRect(0,440,850,60);

    g.setColor(Color.gray);
    g.fillRect(80,420,210,100);
      g.fillRect(100,410,170,100);
      g.fillRect(120,400,130,100);
      g.fillOval(130,350,110,150);
      int[] aPoints = {170,200,185};
      int[] bPoints = {370,370,320};
        g.fillPolygon(aPoints,bPoints, 3);
      g.setColor(Color.black);
      g.fillRect(135,410,20,100);
       g.fillRect(175,410,20,100);
       g.fillRect(215,410,20,100);

      g.setColor(Color.blue);
      g.fillRect(460,140,120,360);

      g.setColor(Color.red);
      g.fillRect(700,400,100,150);

      g.setColor(Color.yellow);
      int[] xPoints = {700,800,750};
      int[] yPoints = {400,400,350};
      g.fillPolygon(xPoints, yPoints, 3);

      g.setColor(Color.black);
      g.fillRect(730,450,40,50);

      g.setColor(Color.darkGray);
    if(explode == false){
      g.fillOval(xLoc,yLoc,80,40);
      g.drawString("hovering...",xLoc,yLoc - 10);
    }else{
      for(int i = 0; i < 2000; i++){
        int x = (int)(Math.random()*850);
        int y = (int)(Math.random()*850);
        g.setColor(Color.orange);
        g.fillOval(x,y,5,5);
        int a = (int)(Math.random()*850);
        int b = (int)(Math.random()*850);
        g.setColor(Color.red);
        g.fillOval(a,b,5,5);
        int c = (int)(Math.random()*850);
        int d = (int)(Math.random()*850);
        g.setColor(Color.yellow);
        g.fillOval(c,d,5,5);
      }
    }
  }

      public void actionPerformed(ActionEvent e){
        if(e.getSource() == quitButton){
          System.exit(0);
        }
        else if(e.getSource() == downButton){
          yLoc += 5;
          if(yLoc == 400){
            explode = true;
          }
        }
        else if(e.getSource() == upButton){
          yLoc -= 5;
        }
        else if(e.getSource() == leftButton){
          xLoc -= 5;
        }
        else if(e.getSource() == rightButton){
          xLoc += 5;
        }

        repaint();
      }
    }

这是我的菜单栏类

import javax.swing.*;


public class menuBar extends JFrame{

  public menuBar(){

    JFrame frame = new JFrame("Menu");
    frame.setVisible(true);
    frame.setSize(850,200);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JMenuBar menuBar = new JMenuBar();
    frame.setJMenuBar(menuBar);

    JMenu file = new JMenu("File");
    menuBar.add(file);
    JMenuItem open = new JMenuItem("Open");
    file.add(open);
    JMenuItem neww = new JMenuItem("New");
    file.add(neww);

    JMenu edit = new JMenu("Edit");
    menuBar.add(edit);
    JMenuItem color = new JMenuItem("Change Color");
    edit.add(color);

    JMenu help = new JMenu("Help");
    menuBar.add(help);
    JMenuItem about = new JMenuItem("About");
    help.add(about);

    frame.setVisible(true);
  }
}

1 个答案:

答案 0 :(得分:2)

您需要做一些小改动。

  • 你的MenuBar类不应该扩展JFrame,它应该扩展JMenuBar。

  • 您的SaucerDriver类需要添加您的MenuBar类,而不是创建一个新的JMenuBar,因为它是空的,并且不会在您的代码中的任何位置填充。

您的代码应如下所示

import javax.swing.*;


public class menuBar extends JMenuBar{

  public menuBar(){

    JMenu file = new JMenu("File");
    this.add(file);
    JMenuItem open = new JMenuItem("Open");
    file.add(open);
    JMenuItem neww = new JMenuItem("New");
    file.add(neww);

    JMenu edit = new JMenu("Edit");
    this.add(edit);
    JMenuItem color = new JMenuItem("Change Color");
    edit.add(color);

    JMenu help = new JMenu("Help");
    this.add(help);
    JMenuItem about = new JMenuItem("About");
    help.add(about);
  }
}

和SaucerDriver这样

import javax.swing.*;

public class SaucerDriver{

  public static void main(String[] args){
    DisplayWindow d = new DisplayWindow();
    d.setJMenuBar(new menuBar());
    SaucerPanel p = new SaucerPanel(menuBar);
    d.addPanel(p);
    d.showFrame();
  }
}

编辑:因为你无法更改SauceDriver并且JMenuBar对象被传递到SaucerPanel对象,然后你可以从SaucerPanel类操作MenuBar。因此,请执行以下操作...

public SaucerPanel(JMenuBar menuBar){
    setMenuBarItems(menuBar);
    //...rest of the JPANEL code here
}

并将此方法添加到您的SaucerPanel类

public void setMenuBarItems(JMenuBar menuBar) {
    JMenu file = new JMenu("File");
    menuBar.add(file);
    JMenuItem open = new JMenuItem("Open");
    file.add(open);
    JMenuItem neww = new JMenuItem("New");
    file.add(neww);

    JMenu edit = new JMenu("Edit");
    menuBar.add(edit);
    JMenuItem color = new JMenuItem("Change Color");
    edit.add(color);

    JMenu help = new JMenu("Help");
    menuBar.add(help);
    JMenuItem about = new JMenuItem("About");
    help.add(about);
}