Java 菜单栏未显示Swing-Eclipse

Java 菜单栏未显示Swing-Eclipse,java,eclipse,swing,Java,Eclipse,Swing,我正在用Eclipse用Java制作一个tic-tac-toe游戏。我已经完成了所有的源代码,但由于某种原因,它不工作,菜单也没有出现。Eclipse没有显示任何错误。有人能帮我吗 import javax.swing.*; import javax.swing.event.*; import java.awt.event.*; import java.awt.*; public class Jogo extends JFrame { private static final long

我正在用Eclipse用Java制作一个tic-tac-toe游戏。我已经完成了所有的源代码,但由于某种原因,它不工作,菜单也没有出现。Eclipse没有显示任何错误。有人能帮我吗

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

public class Jogo extends JFrame {
    private static final long serialVersionUID = 1L;
    private JButton b1,b2,b3,b4,b5,b6,b7,b8,b9;
    int qtde;
    int jogador;
    int mat[][] = new int [3][3];
    JButton b[] = new JButton[9];
    String ganhador;
    String jogador1;
    String jogador2;

    public Jogo() {
        setTitle("Jogo da Velha");
        setBounds(190,100,300,400);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        getContentPane().setBackground(new Color(197,197,197));
        setLayout(null);

        b1 = new JButton();
        b1.setBounds(25,50,60,70);
        this.add(b1);

        b2 = new JButton();
        b2.setBounds(115,50,60,70);
        this.add(b2);

        b3 = new JButton();
        b3.setBounds(205,50,60,70);
        this.add(b3);

        b4 = new JButton();
        b4.setBounds(25,140,60,70);
        this.add(b4);

        b5 = new JButton();
        b5.setBounds(115,140,60,70);
        this.add(b5);

        b6 = new JButton();
        b6.setBounds(205,140,60,70);
        this.add(b6);

        b7 = new JButton();
        b7.setBounds(25,230,60,70);
        this.add(b7);

        b8 = new JButton();
        b8.setBounds(115,230,60,70);
        this.add(b8);

        b9 = new JButton();
        b9.setBounds(205,230,60,70);
        this.add(b9);
        qtde = 1;
        jogador = 1;
        b[0] = b1;
        b[1] = b2;
        b[2] = b3;
        b[3] = b4;
        b[4] = b5;
        b[5] = b6;
        b[6] = b7;
        b[7] = b8;
        b[8] = b9;


    }
    public void jogada(JButton b,int x, int y){
        b.setEnabled(false);
        if (jogador == 1){
            mat [x][y] = 1;
            b.setText("X");
            jogador = 2;
            ganhador = jogador1;
            checarjogada(1);
        } else {
            mat [x][y] = 2;
            b.setText("O");
            jogador =1;
            ganhador = jogador2;
            checarjogada(2);
        }
        qtde++;
    }
    public void checarjogada(int x){
        if (vitoria(x)== true){
            JOptionPane.showMessageDialog(null,"Jogador:"+ganhador+""+"Venceu", "Vitória!",JOptionPane.INFORMATION_MESSAGE);
            fimdojogo();
        }
    }
    public boolean vitoria (int x){
        for (int i = 0; i < mat.length;i++){
        if(mat[i][0] == x && mat [i][1] == x && mat [i][2] == x){
            return true;
        }
        if (mat[0][i]== x && mat [1][i] == x && mat [2][i] == x){
            return true;
        }
    }
        if(mat[0][0] == x && mat [1][1] == x && mat[2][2] == x){
            return true;
        }
        if(mat[0][2] == x && mat [1][1] == x && mat [2][0] == x){
            return true;
        }
        return false;
    }
    public void fimdojogo(){
        for(int i =0; i<9;i++){
            b[i].setEnabled(false);
        }
    }
    public void limpar(){
        for(int i=0;i < 9; i++){
            b[i].setEnabled(true);
            b[i].setText("");
        }
        for(int x=0; x < 3; x++){
            for(int y=0;y < 3;y++){
                mat[x][y] = 0;
            }
        }
        jogador = 1;
        jogador1 = "";
        jogador2 = "";
        ganhador = "";

            jMenuBar1 = new JMenuBar();
            jMenu1 = new JMenu();
            jMenuItem1 = new JMenuItem();
            jMenu2 = new JMenu();

        b1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                b1ActionPerformed(evt);
            }
        });

        b2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                b2ActionPerformed(evt);
            }
        });

        b3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                b3ActionPerformed(evt);
            }
        });

        b4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                b4ActionPerformed(evt);
            }
        });

        b5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                b5ActionPerformed(evt);
            }
        });

        b6.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                b6ActionPerformed(evt);
            }
        });

        b7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                b7ActionPerformed(evt);
            }
        });

        b8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                b8ActionPerformed(evt);
            }
        });

        b9.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                b9ActionPerformed(evt);
            }
        });

        jMenu1.setMnemonic('N');
        jMenu1.setText("Opções");
        jMenu1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenu1ActionPerformed(evt);
            }
        });

        jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F8, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItem1.setMnemonic('N');
        jMenuItem1.setText("Novo Jogo");
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem1ActionPerformed(evt);
            }
        });
        jMenu1.add(jMenuItem1);

        jMenuBar1.add(jMenu1);

        jMenu2.setText("Sair");
        jMenu2.addMenuListener(new javax.swing.event.MenuListener() {
            public void menuCanceled(javax.swing.event.MenuEvent evt) {
            }
            public void menuDeselected(javax.swing.event.MenuEvent evt) {
            }
            public void menuSelected(javax.swing.event.MenuEvent evt) {
                jMenu2MenuSelected(evt);
            }
        });
        jMenuBar1.add(jMenu2);

        setJMenuBar(jMenuBar1);


    }
    private void jMenuItem1ActionPerformed(ActionEvent evt) {                                           
    }                                          

    private void b1ActionPerformed(ActionEvent evt) {                                     
      jogada(b1,0,0);
    }                                    

    private void b2ActionPerformed(ActionEvent evt) {                                     
      jogada(b2,0,1);
    }                                    

    private void b3ActionPerformed(ActionEvent evt) {                                     
       jogada(b3,0,2);
    }                                    

    private void b4ActionPerformed(ActionEvent evt) {                                     
        jogada(b4,1,0);
    }                                    

    private void b5ActionPerformed(ActionEvent evt) {                                     
        jogada(b5,1,1);
    }                                    

    private void b6ActionPerformed(ActionEvent evt) {                                     
        jogada(b6,1,2);
    }                                    

    private void b7ActionPerformed(ActionEvent evt) {                                     
        jogada(b7,2,0);
    }                                    

    private void b8ActionPerformed(ActionEvent evt) {                                     
        jogada(b8,2,1);
    }                                    

    private void b9ActionPerformed(ActionEvent evt) {                                     
        jogada(b9,2,2);
    }                                    

    private void jMenu2MenuSelected(MenuEvent evt) {                                    
        System.exit(0);
    }                                   

    private void jMenu1ActionPerformed(ActionEvent evt) {                                       
        limpar();
        jogador1 = JOptionPane.showInputDialog("Digite o nome do Jogador 1");
        jogador2 = JOptionPane.showInputDialog("Digite o nome do Jogador 2");
    }                                      

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Jogo().setVisible(true);
            }
        });
    }                   
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;                 
}
import javax.swing.*;
导入javax.swing.event.*;
导入java.awt.event.*;
导入java.awt.*;
公共类Jogo扩展了JFrame{
私有静态最终长serialVersionUID=1L;
专用按钮b1、b2、b3、b4、b5、b6、b7、b8、b9;
int-qtde;
国际乔加多;
int mat[][]=新int[3][3];
JButton b[]=新JButton[9];
弦甘哈多;
字符串1;
线状突起2;
公共Jogo(){
setTitle(“Jogo da Velha”);
立根数(190100300400);
可设置大小(假);
setDefaultCloseOperation(关闭时退出);
getContentPane().setBackground(新颜色(197197197));
setLayout(空);
b1=新的JButton();
b1.立根(25,50,60,70);
本条增补(b1);
b2=新的JButton();
b2.立根(115,50,60,70);
本条增补(b2);
b3=新的JButton();
b3.立根(205,50,60,70);
本条增补(b3);
b4=新的JButton();
b4.立根(25140,60,70);
本条增补(b4);
b5=新的JButton();
b5.立根(115140,60,70);
本条增补(b5);
b6=新的JButton();
b6.立根(205140,60,70);
本条增补(b6);
b7=新的JButton();
b7.立根(25230,60,70);
本条增补(b7);
b8=新的JButton();
b8.立根(115230,60,70);
本条增补(b8);
b9=新的JButton();
b9.立根(205230,60,70);
本条增补(b9);
qtde=1;
jogador=1;
b[0]=b1;
b[1]=b2;
b[2]=b3;
b[3]=b4;
b[4]=b5;
b[5]=b6;
b[6]=b7;
b[7]=b8;
b[8]=b9;
}
公共空间(JButton b,int x,int y){
b、 setEnabled(假);
如果(jogador==1){
mat[x][y]=1;
b、 setText(“X”);
jogador=2;
甘哈多=1;
checarjogada(1);
}否则{
mat[x][y]=2;
b、 setText(“O”);
jogador=1;
甘哈多=2;
checarjogada(2);
}
qtde++;
}
checarjogada公共区(int x){
如果(维多利亚(x)=真){
showMessageDialog(null,“Jogador:“+ganhador+”+“Venceu”,“Vitória!”,JOptionPane.INFORMATION_MESSAGE);
fimdojogo();
}
}
公共维多利亚(int x){
对于(int i=0;i对于(inti=0;i为什么不使用循环来创建按钮?
这是我的:

    import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;

import javax.swing.*;


public class TicTacToe extends JFrame {
    JPanel p = new JPanel();
    XOButton button[] = new XOButton[9];
    JButton clear = new JButton("CLEAR!");


    public static void main(String[] args) {
        new TicTacToe();
    }


    public TicTacToe() {
        setTitle("Tic Tac Toe!");
        setSize(600, 800);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setResizable(true);



        p.setLayout(new GridLayout(4,3));
        for (int i=0; i<9; i++) {
            button[i] = new XOButton();
            p.add(button[i]);

        clear.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent e) { 


    button[0].setIcon(null);
                    button[1].setIcon(null);
                    button[2].setIcon(null);
                    button[3].setIcon(null);
                    button[4].setIcon(null);
                    button[5].setIcon(null);
                    button[6].setIcon(null);
                    button[7].setIcon(null);
                    button[8].setIcon(null);

            }

        });


        p.add(clear);
        add(p);



        setVisible(true);

    }

}
}

看一看

听起来你在问为什么菜单栏没有出现? 以下是您的代码的简化版本:

public class Jogo extends JFrame {

public Jogo() {
    ...
    //Adding buttons
}

private void jMenu1ActionPerformed(ActionEvent evt) {

    limpar();
    ...
}

public void limpar(){
    ...
    jMenuBar1 = new JMenuBar();
    ...
    setJMenuBar(jMenuBar1);
}

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Jogo().setVisible(true);
        }
    });
}
它不会出现,因为您从未创建过菜单栏。
仅当
limpar()命令调用了
方法,但只有当
jMenu1
执行了操作时才调用此方法。因此,这永远不会发生,因为您无法在尚未创建的菜单上执行操作!您需要在类的构造函数中创建
JMenuBar

在第一节中,分配每个元素在定义它们之前,将数组的值复制到b1、b2、b3等等(因此它们以null开头,并且您刚刚将null复制到数组的每个元素中)。然后,您将它们定义为新的JButton--但这不会影响java中的数组。您需要以相反的方式进行。将它们定义为新的JButton,然后将它们添加到您的数组中。我这样做了,但仍然是一样的…代码编辑!java GUI可能必须在多个平台上工作,使用不同的屏幕分辨率和不同的PLAF。例如h它们不利于组件的精确放置。要组织组件以获得一个健壮的GUI,请使用布局管理器,或者与布局填充和边框一起使用。您有图像吗?只需使用您想要的任何图像,但确保它们位于同一文件夹中,如100px x x100px@user3632011没问题!请考虑接受ANSWE。r如果它解决了问题。这是对人们的一个很好的“谢谢”,你和其他人都会得到声誉积分。:)
public class Jogo extends JFrame {

public Jogo() {
    ...
    //Adding buttons
}

private void jMenu1ActionPerformed(ActionEvent evt) {

    limpar();
    ...
}

public void limpar(){
    ...
    jMenuBar1 = new JMenuBar();
    ...
    setJMenuBar(jMenuBar1);
}

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Jogo().setVisible(true);
        }
    });
}