利用AWT或swing,设计一个地球绕太阳转、月亮绕地球转的程序。
时间: 2023-09-04 16:04:08 浏览: 103
### 回答1:
好的,以下是一个简单的Java Swing程序,用于演示地球绕太阳转、月亮绕地球转的过程:
```java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class SolarSystem extends JPanel implements ActionListener {
private final int WIDTH = 800;
private final int HEIGHT = 600;
private final int EARTH_RADIUS = 30;
private final int MOON_RADIUS = 10;
private final int SUN_RADIUS = 50;
private final double EARTH_ORBIT_RADIUS = 200;
private final double MOON_ORBIT_RADIUS = 50;
private double earthAngle = 0;
private double moonAngle = 0;
public SolarSystem() {
Timer timer = new Timer(10, this);
timer.start();
}
@Override
public void actionPerformed(ActionEvent e) {
earthAngle += 0.01;
moonAngle += 0.05;
repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(0, 0, WIDTH, HEIGHT);
Point center = new Point(WIDTH / 2, HEIGHT / 2);
// 画太阳
g.setColor(Color.YELLOW);
g.fillOval(center.x - SUN_RADIUS, center.y - SUN_RADIUS, SUN_RADIUS * 2, SUN_RADIUS * 2);
// 画地球
int earthX = (int) (center.x + EARTH_ORBIT_RADIUS * Math.cos(earthAngle));
int earthY = (int) (center.y + EARTH_ORBIT_RADIUS * Math.sin(earthAngle));
g.setColor(Color.BLUE);
g.fillOval(earthX - EARTH_RADIUS, earthY - EARTH_RADIUS, EARTH_RADIUS * 2, EARTH_RADIUS * 2);
// 画月亮
int moonX = (int) (earthX + MOON_ORBIT_RADIUS * Math.cos(moonAngle));
int moonY = (int) (earthY + MOON_ORBIT_RADIUS * Math.sin(moonAngle));
g.setColor(Color.GRAY);
g.fillOval(moonX - MOON_RADIUS, moonY - MOON_RADIUS, MOON_RADIUS * 2, MOON_RADIUS * 2);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Solar System");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.add(new SolarSystem());
frame.setVisible(true);
}
}
```
在这个程序中,我们使用了Java Swing中的JPanel类来实现画图功能,并利用Timer类来实现动画效果。程序中有几个常量,分别代表了地球、月亮和太阳的半径以及它们的轨道半径。在paintComponent方法中,我们首先用黑色填充整个面板,然后画出太阳、地球和月亮。太阳是一颗黄色的圆,地球和月亮则通过计算它们在轨道上的位置来画出来。通过不断改变地球和月亮的角度,我们就可以实现它们绕着太阳和地球转动的效果。
运行程序,即可看到地球和月亮绕太阳和地球转的效果。
### 回答2:
要使用AWT或Swing设计一个地球绕太阳转、月亮绕地球转的程序,可以按照以下步骤进行:
1. 创建一个主窗口,并设置好窗口的大小、标题等属性。
2. 在主窗口中创建一个自定义的“太阳面板”来表示太阳。可以使用Java绘图工具(如Graphics类)在面板上绘制一个黄色的圆形。
3. 在主窗口中创建一个自定义的“地球面板”来表示地球。可以使用Graphics在面板上绘制一个蓝色的圆形。
4. 在地球面板中再创建一个“月亮面板”来表示月亮。可以使用Graphics在面板上绘制一个灰色的圆形。
5. 定义一个定时器,每隔一段时间(如100毫秒)触发一次,并在事件中更新太阳、地球和月亮面板的位置。
6. 在定时器事件中,可以根据一定的速度和角度计算出太阳、地球和月亮的新位置,并使用repaint()方法重新绘制面板。
7. 为了实现地球绕太阳转和月亮绕地球转的效果,可以设置不同的角速度和半径参数,并在计算新位置时使用不同的角度。
8. 最后,将太阳面板、地球面板和月亮面板添加到主窗口中,并使用布局管理器来确定它们之间的位置关系和大小。
通过以上步骤,就可以设计一个利用AWT或Swing实现地球绕太阳转、月亮绕地球转的程序。在运行程序时,太阳、地球和月亮将会按照设定的速度和轨迹运动,从而展现出宇宙中天体运行的奇妙景象。
### 回答3:
使用Java中的AWT或Swing库,我们可以设计一个地球绕太阳转,月亮绕地球转的程序。
首先,我们需要创建一个窗口来显示地球、太阳和月亮。可以使用 JFrame 类来创建一个窗口,然后在窗口中添加绘制图形的组件。
接下来,我们需要定义地球、太阳和月亮的位置和大小。这可以通过定义相应的变量来实现。例如,可以使用坐标和半径来表示地球、太阳和月亮的位置和大小。在程序中,我们可以使用 data 类型(例如,整数或浮点数)来存储这些信息。
然后,我们需要在窗口上绘制地球、太阳和月亮。可以使用 Java 的绘图类来完成这个任务。例如,可以使用 Graphics 类的方法(例如 drawOval())来绘制圆形来表示地球、太阳和月亮。
为了使地球和月亮绕太阳和地球转动,我们可以使用定时器。在每个时间间隔内,我们可以更新地球和月亮的位置和角度,然后重新绘制它们。可以使用 javax.swing.Timer 类来创建一个定时器,然后为它设置一个固定的时间间隔,以更新图形的位置和角度。
最后,我们需要运行程序,并观察地球绕太阳转、月亮绕地球转的效果。可以使用主方法来启动程序。
这样,我们就可以使用AWT或Swing库设计一个地球绕太阳转,月亮绕地球转的程序了。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)