我正在为一个赋值修改一些现有的Java代码,我无法弄清楚如何从ActionListener中调用现有对象的函数。
只会有一个“myGame”实例。
以下是相关代码;
public class myGame extends JFrame {
public myGame() {
//...snip...
statsBar = new JLabel("");
add(statsBar, BorderLayout.SOUTH);
add(new Board(statsBar));
setResizable(false);
setVisible(true);
addMenubar();
}
private void addMenubar() {
JMenuBar menubar = new JMenuBar();
JMenu topMnuGame = new JMenu("File");
JMenuItem mnuSolve = new JMenuItem("Solve");
mnuSolve.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
// freshGame.solveGame();
// this is where I need to call the solveGame function
// for the "freshGame" instance.
solveGame();
}
});
topMnuGame.add(mnuSolve);
menubar.add(topMnuGame);
}
public static void main(String[] args) {
myGame freshGame = new myGame();
}
}
public class Board extends JPanel {
public Board(JLabel statsBar) {
this.statsBar = statsBar;
//..snip..
addMouseListener( new gameAdapter() );
}
public void solveGame() {
// .. do stuff with object ..
}
}
所以我的问题是,如何使用“freshGame”实例在“myGame”类中调用“solveGame()”?
答案 0 :(得分:1)
简短的通用答案:
在Java中,如果您有一个对象,也称为类的实例,例如
MyClass myObj = new MyClass();
然后您可以像这样访问该对象的类的非静态成员:
myObj.myMethod();
无论你要调用某个方法,都需要a reference到正确的对象,所以将它作为参数传递给需要它的方法:
class OtherClass {
// snip constructors etc
public void otherMethod(MyClass obj) {
obj.myMethod();
}
}
或者,将其作为构造函数参数传递并将其存储在私有成员变量中,以便稍后从方法中调用它。
class SomeClass {
private final MyClass someMyClass;
SomeClass(MyClass someMyClass) {
this.someMyClass = someMyClass;
}
public void someMethod() {
this.someMyClass.myMethod();
}
}
答案 1 :(得分:0)
我完全不明白你的问题。我所理解的是,您无法使用solveGame()
对象调用freshGame
函数,该对象是myGame
类的实例。
1。您的solveGame()
功能位于Board
课程中,因此您只能使用Board
实例进行调用。
2 因此,您必须在Board
课程中创建myGame
的实例才能使用它,可能如下所示。
public class myGame extends JFrame {
private Board board;
public myGame() {
//...snip...
statsBar = new JLabel("");
board= Board(statsBar ) // initializing Board Class . you can do your self
add(statsBar, BorderLayout.SOUTH);
add(new Board(statsBar));
setResizable(false);
setVisible(true);
addMenubar();
}
private void addMenubar() {
JMenuBar menubar = new JMenuBar();
JMenu topMnuGame = new JMenu("File");
JMenuItem mnuSolve = new JMenuItem("Solve");
mnuSolve.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
// freshGame.solveGame();
// this is where I need to call the solveGame function
// for the "freshGame" instance.
solveGame();
// now you can call
board.solveGame();
}
});
topMnuGame.add(mnuSolve);
menubar.add(topMnuGame);
}
public static void main(String[] args) {
myGame freshGame = new myGame();
}
}