我正在努力学习java的游戏设计,我正在遵循一个教程。本教程给出了这段代码,但没有详细说明。我有一些关于java和图形的问题。
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Game2 extends JPanel {
@Override
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.RED);
g2d.fillOval(0, 0, 30, 30);
g2d.drawOval(0, 50, 30, 30);
g2d.fillRect(50, 0, 30, 30);
g2d.drawRect(50, 50, 30, 30);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Mini Tennis");
frame.add(new Game2());
frame.setSize(300, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
为什么我们需要将jpanel扩展到类game2中?我从来没有在我的主类上使用过扩展,所以我不知道在这种情况下它意味着什么,为什么有必要。
是什么 frame.add(new Game2());
什么意思?为什么我们可以在game2()类中创建一个新的game2()?
什么是图形和图形2D对象?我们也不能仅仅使用一个graphics2d对象作为paint()的参数,因为除了将g类型转换为graphics2d对象之外,我们从未使用过g。
最后,为什么我们不需要调用paint()?
1条答案
按热度按时间vcirk6k61#
你可以(几乎)扩展任何你喜欢的组件。这里最关键的是你把组件放到
JFrame
这使它成为新Windows的底座。使用JPanel
是好的,因为它不包含图形,因此可以作为普通画布。frame.add(new Game2())
把JPanel
你正在扩展到一个JFrame
.只要类示例在给定的范围内可见,就可以在任何地方自由创建它们。
一个例子
Graphics2D
类传递给paint()
每当底层操作系统决定重新绘制组件时(例如,在显示窗口或在组件上拖动另一个窗口时),都会自动使用。参数的类型始终为
Graphics
(这意味着该值可以是同一类型,也可以是扩展它的任何类)。这是由方法的定义给出的(意味着一些父类或接口这样声明它),您不能更改它。在开始更复杂的工作之前,请先花点时间熟悉面向对象编程的基础知识:
https://www.w3schools.com/java/java_oop.asp