无法从JLabel的子类运行方法

时间:2019-08-04 20:48:54

标签: java swing jlabel

我正在尝试使用“ 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);

    }
}

2 个答案:

答案 0 :(得分:3)

private JLabel gameArea;

JLabel没有方法runGame()。

您的代码应为:

private GameArea gameArea;

然后您将可以使用gameArea.runGame()

但是真正的问题是你为什么还要这么做?

您只需在标签上调用setText(...)即可更改文本。无需使用自定义方法创建自定义类。

答案 1 :(得分:0)

您正在将gameArea的类型指定为JLabelJLabel接口没有方法runGame。您将需要强制转换gameArea才能调用该方法

((GameArea) gameArea).runGame()