J'essaye d'écrire un petit "jeu" qui consiste en un U.F.O. qui vole dans toutes les directions (sur la base des boutons) et explose quand il atteint le bas de l'écran. J'ai 4 classes, dont 2 je ne suis pas autorisé à éditer. Ils sont:Pourquoi ma barre de menu n'apparaîtra-t-elle pas avec ma fenêtre d'affichage?
La fenêtre d'affichage
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);
}
}
Et le pilote de l'OVNI. J'essaye d'ajouter une barre de menu mais elle ne montrera pas. Qu'est-ce que je fais mal?
Voici ma classe pour dessiner tous les bâtiments et ainsi de suite
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();
}
}
Et voici ma classe barre de menu
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);
}
}
pourquoi avez-vous deux classes de JFrame? Vous voulez certainement ajouter votre JMenuBar à la classe DisplayWindow? – Codemwnci
Oui, c'est ce que je veux faire, mais je ne peux éditer que la classe Menu et la classe SaucerPanel. Comment ferais-je cela? – user539243