Java 菜单栏未显示Swing-Eclipse
我正在用Eclipse用Java制作一个tic-tac-toe游戏。我已经完成了所有的源代码,但由于某种原因,它不工作,菜单也没有出现。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
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);
}
});
}