【问题标题】:How can I use a Method from a class in a different class?如何使用不同类中的类中的方法?
【发布时间】:2017-10-14 18:11:23
【问题描述】:

我已经尝试了几个小时了,但无济于事。

我正在尝试在我的 Game.java 类中使用 paintComponent 方法,但我不确定具体如何执行此操作。

我尝试过直接调用该函数,但它当然不起作用,因为它需要返回一些东西。

我需要使用的方法在这个“Circles.java”类中:


package testgame;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import javax.swing.JPanel;
import javax.swing.JPanel;

public class Circles extends JPanel {

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Bubbles(g); }

    private void Bubbles(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        RenderingHints rh
                = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        rh.put(RenderingHints.KEY_RENDERING, 
                RenderingHints.VALUE_RENDER_QUALITY);
        g2d.setRenderingHints(rh);
        int x, y, size;
        x = (int) (Math.random() * 500) + 15;
        y = (int) (Math.random() * 450) + 15;
        size = (int) (Math.random() * 30) + 10;
        g2d.setColor(Color.green);
        g2d.drawOval(x, y, size, size); } 
}

这是需要paintComponent方法的类(Game.java):


package testgame;

import java.awt.EventQueue;
import javax.swing.JFrame;

public class Game extends JFrame {

    public static void LoadUI() {
        JFrame frame = new JFrame("Just a test!");
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setSize(550, 500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true); }

public static void main(String[] args) {
     frame.add(new (Circles()));  }
}

我得到的错误是:

frame.add(new (Circles()));

错误是:

identifier expected

cannot find symbol
symbol:  method Circles()
location: class Game

cannot find symbol
symbol:  variable frame
location: class Game

【问题讨论】:

标签: java class methods paintcomponent


【解决方案1】:

您在 frame.add(new (Circles())); 中尝试在 main 方法中执行的操作是访问仅在您的 LoadUI() 方法中可用的变量。

为了能够访问该变量,您需要在 LoadUI() 方法之外声明它,如下所示:

    ...
    public class Game extends JFrame {

    JFrame frame;

    public static void LoadUI()....

其次,正如上面提到的Manish Jaiswal,你的括号放置是错误的,这意味着你初始化Circles对象的方式是错误的。

要使这段代码工作,你可以在你的 main 方法中做这样的事情:

LoadGUI();
frame.add(new Circles());

虽然我建议为您的 GUI/JFrame 使用单独的类/对象,而不是使 LoadUI() 方法静态。 您还可以以更易于阅读的方式缩进您的代码,只是为了让您自己也更容易:)

【讨论】:

  • 谢谢伙计,成功了!我这样声明变量: public static JFrame frame = new JFrame("Just a test!"); Java 做对了!顺便说一句,你认为我应该委托每个类来执行特定的功能(比如画圆圈、加载 UI)然后在 main 中执行所有这些吗?
  • @GianfrancoStercoforti 嗯,一般来说,Java 是一种面向对象的语言,这意味着是的,您可以为每个函数使用一个单独的类。但是你应该尝试做的是在某种对象之后的模型类(只是部分)。这就是为什么有 JFrame 的原因。从广义上讲,它应该代表一个窗口。您可以对表示文件的 File 类执行相同的操作。因此,我建议您使用单独的方法来加载 UI 等,但也许将其保留在同一个类中并使用对象/类来代替文件管理(单独的目的)。
【解决方案2】:

首先应该是new Circle ()而不是new (Circle())

第二件事,newCircle() 都在不同的括号中,java 将 Circle() 视为 Class Game 的方法,因此您会遇到这样的错误。

【讨论】:

    猜你喜欢
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多