如何使用不同课程中的课程?

问题描述:

我一直在尝试这个小时,现在没有用。如何使用不同课程中的课程?

我想在我的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 
+0

Java中的[paint()和repaint()可能重复](https://*.com/questions/10768619/paint-and-repaint-in-java) –

+0

而不是frame.add(new(Circles()));写frame.add(new Circles()); – keuleJ

你在这里试图做什么frame.add(new (Circles()));在你的主要方法中访问一个变量,它只在你的LoadUI()方法中可用。

为了能够访问该变量,你需要声明它的LoadUI()方法外,像这样:

... 
    public class Game extends JFrame { 

    JFrame frame; 

    public static void LoadUI().... 

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

为了使此代码的工作,你可以做这样的事情在你的主要方法:

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

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

+0

艾伊感谢队友,它的工作!我声明这样的变量:public static JFrame frame = new JFrame(“Just a test!”);而Java正确无误!顺便说一下,你认为我应该委派每个类来做一个特定的功能(如绘制圆圈,加载用户界面),然后执行主要的所有功能? –

+0

@GianfrancoStercofort那么,通常Java是一种面向对象的语言,这意味着是的,你可以为每个函数使用一个单独的类。但你应该尝试做的是在某种对象之后建立模型类(部分)。这就是为什么有JFrame。从广义上讲,它应该代表一个窗口。你可以用File类来完成同样的事情,它代表一个文件。 所以我建议你使用单独的方法来加载用户界面等,但也许保持它在同一个类中,并使用对象/类来处理文件管理等事情(单独的目的)。 – privoid

首先,它应该是new Circle(),而不是新(圆())

第二件事newCircle()都在不同的括号中,java把Circle()当作Class Game的方法,因此你会得到那样的错误。