我正在尝试使用“ gameArea.runGame();”在JLabel的子类“ gameArea”中运行游戏,但出现错误“无法解析方法'runGame'。我知道我可以运行所有这些方法子类“ gameArea”之外,但了解为什么我不能以这种方式这样做会有所帮助。我已经剔除了所有不必要的代码。
package Components;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MainFrame extends JFrame {
private BottomPanel bottomPanel;
private JLabel gameArea;
public MainFrame() {
super("test window");
setLayout(new BorderLayout());
bottomPanel = new BottomPanel();
gameArea = new GameArea();
add(gameArea, BorderLayout.CENTER);
add(bottomPanel, BorderLayout.AFTER_LAST_LINE);
bottomPanel.startBTN.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
gameArea.runGame(); // THIS IS WHERE I GET THE ERROR
}
});
setSize(800, 800);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
package Components;
import javax.swing.*;
public class GameArea extends JLabel {
public GameArea() {
setText("Waiting for Input");
}
public void runGame() {
setText("Game has been run");
}
}
package Components;
import javax.swing.*;
import java.awt.*;
public class BottomPanel extends JPanel {
public JButton startBTN;
public BottomPanel() {
startBTN = new JButton("Start");
setLayout(new FlowLayout(FlowLayout.RIGHT));
add(startBTN);
}
}
答案 0 :(得分:3)
private JLabel gameArea;
JLabel没有方法runGame()。
您的代码应为:
private GameArea gameArea;
然后您将可以使用gameArea.runGame()
。
但是真正的问题是你为什么还要这么做?
您只需在标签上调用setText(...)
即可更改文本。无需使用自定义方法创建自定义类。
答案 1 :(得分:0)
您正在将gameArea
的类型指定为JLabel
。 JLabel
接口没有方法runGame
。您将需要强制转换gameArea
才能调用该方法
((GameArea) gameArea).runGame()