2012-03-09 84 views
-1

Game.java调用board.java中的函数getLabel()。当我运行Game.java时,在终端中出现错误“无法找到符号方法getLabel()”。我无法纠正它。方法调用不起作用

Game.java

import java.awt.*; 
import javax.swing.*; 
import javax.swing.JLabel; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

public class Game { 

    private board b; 
    private bishop bis1; 
    private JLabel q; 

    public static void main(String[] args) { 
     Game f = new Game(); 
     f.start(); 
    } 

    public void start() { 
     b = new board(); 
     bis1 = new bishop(); 
     bis1.setLocation(0, 0); 
     ImageIcon m = bis1.getImage(); 
     q = b.getLabel(); 

     q.addMouseListener(new Mouselist()); 
     b.squares[0][0].add(q); 
    } 

    class Mouselist implements MouseListener { 

     public void mouseClicked(MouseEvent e) { 
      //k.setIcon(null); 
      b.squares[1][1].add(new JLabel(new ImageIcon("rook.png"))); 
     } 

     // mouse entered the JLabel increment count and display it 
     public void mouseEntered(MouseEvent e) { 
      b.squares[1][1].add(new JLabel(new ImageIcon("rook.png"))); 
     } 

     public void mouseExited(MouseEvent e) { 
      b.squares[1][2].add(new JLabel(new ImageIcon("rook.png"))); 
     } 

     // mouse was presssed (cliked and released) 
     // increment counter and display it 
     public void mousePressed(MouseEvent e) { 
      b.squares[1][1].add(new JLabel(new ImageIcon("rook.png"))); 

     } 

     public void mouseReleased(MouseEvent e) { 
      b.squares[1][1].add(new JLabel(new ImageIcon("rook.png"))); 
     } 
    } 
} 

board.java

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

public class board { 

    public JFrame frame; 
    public JPanel squares[][] = new JPanel[3][3]; 
    private JLabel sqk = new JLabel(new ImageIcon("knight.png")); 

    public board() { 
     frame = new JFrame("Simplified Chess"); 
     frame.setSize(1200, 800); 
     frame.setLayout(new GridLayout(2, 3)); 

     for (int i = 0; i < 2; i++) { 
      for (int j = 0; j < 3; j++) { 
       squares[i][j] = new JPanel(); 

       if ((i + j) % 2 == 0) { 
        squares[i][j].setBackground(Color.black); 
       } else { 
        squares[i][j].setBackground(Color.white); 
       } 
       frame.add(squares[i][j]); 
      } 
     } 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    public JLabel getLabel() { 
     return sqk; 
    } 
} 

什么可能是错在这里?

+6

Java编码约定认为类应该以大写字母开头,所以它应该是'Board'而不是'Board'。可能不会帮助你解决你的问题,但作为一般说明。 – nwinkler 2012-03-09 11:34:29

+5

您是否重新编译过board.java? =) – mcfinnigan 2012-03-09 11:35:02

+0

没有名称为'call'的此类方法 – mKorbel 2012-03-09 11:35:32

回答

3

最大的可能是你刚才添加的getLabel()方法和尚未重新编译board.java

0

我把你的代码都board.java和Game.java并加载到我的IDE。我没有收到第24行的错误消息(q = b.getLabel())。 (因为您没有提供bishop.java,所以出现了一些编译错误,但这与您的问题无关。)

行24是哪里出错?如果是这样,你能给我发送3个实际的.java文件吗?顺便说一句,尽管如上所述,再次与您的问题无关,大写类名(例如董事会和主教)是非常标准的做法,我强烈建议您这样做。这将使其他Java程序员更容易阅读你的代码。