【发布时间】:2019-09-07 01:24:31
【问题描述】:
我正在尝试在我的主类的 JPanel 上显示来自单独类的图形。
主类是 mytest,单独的类是 Ball。 Ball 有一个paint 组件方法,简单地绘制一个彩色圆圈。在 mytest 中,我实例化了一个球并将其添加到 JPanel (dp):dp.add(ball)。很简单,但我得到的只是白色面板背景,没有绘制任何球。
这是我的测试代码:
package myStuff;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class mytest {
private JFrame frame=new JFrame();
private JPanel dp = new JPanel();
public static void main(String[] args) {
mytest gui = new mytest();
gui.go();
}
public void go() {
frame.setTitle("Test");
frame.setSize(1000,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel dp=new JPanel();
dp.setBackground(Color.WHITE);
Ball ball = new Ball(dp.getWidth(),dp.getHeight());
dp.add(ball);
frame.add(dp);
frame.setVisible(true);
}
}
这是类 Ball 代码:
package myStuff;
import java.awt.*;
import javax.swing.*;
public class Ball extends JComponent{
private int Width;
private int Height;
public Ball (int width, int height ) {
Width=width;
Height=height;
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
super.paintComponent(g2d);
g2d.setColor(Color.RED);
g2d.fillOval(Width/2,Height/2,40,40);
System.out.println("Doing graphics....");
}
}
一个红球应该出现在 dp 面板上。我得到的只是面板背景,没有球。我知道它正在尝试,因为“做图形”打印了两次。
【问题讨论】:
-
我刚刚注意到我添加了两次 JPanel dp。我从 go() 中取出了它,但它没有任何区别......仍然没有球。
-
Ball可能不应该是JComponent,而只是知道如何在请求时绘制自己。绘制它的组件可能是TennisCourt或GolfCourse等,可以包含对Ball、Paddle、Net等一个或多个实例的引用。