JPanel 圆形
时间: 2023-08-11 09:07:38 浏览: 114
要在 JPanel 上绘制一个圆形,可以使用 Graphics 类的 drawOval() 方法。以下是一个简单的例子:
```
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class CirclePanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.drawOval(10, 10, 50, 50);
}
}
```
在这个例子中,我们继承了 JPanel 类并重写了它的 paintComponent() 方法。在该方法中,我们首先调用了父类的 paintComponent() 方法来保证 JPanel 能够正常工作。然后,我们设置了画笔颜色为红色,并使用 drawOval() 方法绘制了一个圆形。drawOval() 方法的四个参数分别是圆形左上角的 x 坐标、左上角的 y 坐标、圆形的宽度和高度。在这个例子中,我们绘制了一个左上角坐标为 (10, 10),宽度和高度都为 50 像素的圆形。最后,我们将 CirclePanel 加入到 JFrame 中即可看到结果。
相关问题
请提供一个Java程序示例,展示如何利用JPanel的paintComponent方法和Graphics类绘制一个带有圆形和矩形的简单图形用户界面。
在学习如何使用Java的AWT和Swing组件来创建图形用户界面时,掌握`paintComponent`方法和`Graphics`类是关键。以下是一个示例代码,演示了如何在`JPanel`上绘制一个自定义图形,包括圆形和矩形:
参考资源链接:[Java GUI教程:创建笑脸效果](https://wenku.csdn.net/doc/3yamkrz3ih?spm=1055.2569.3001.10343)
```java
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Graphics;
public class CustomShapeExample extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); // 必须先调用父类的paintComponent
// 设置颜色并绘制一个填充的圆形作为笑脸的眼睛
g.setColor(Color.BLACK);
g.fillOval(50, 100, 30, 30); // 绘制左眼
g.fillOval(170, 100, 30, 30); // 绘制右眼
// 设置颜色并绘制一个填充的矩形作为笑脸的嘴巴
g.setColor(Color.BLACK);
g.fillRect(70, 150, 100, 20); // 绘制嘴巴
// 设置背景颜色
g.setColor(Color.YELLOW);
g.fillRect(0, 0, 240, 200); // 绘制背景
}
public static void main(String[] args) {
JFrame frame = new JFrame(
参考资源链接:[Java GUI教程:创建笑脸效果](https://wenku.csdn.net/doc/3yamkrz3ih?spm=1055.2569.3001.10343)
JPanel上绘制的图像最小化窗口后就消失了
当你在`JPanel`上绘制图像时,绘制的图像只会在`JPanel`可见时才会显示出来。当你最小化了窗口或将窗口覆盖在其他窗口上时,`JPanel`将不再可见,绘制的图像也就消失了。当你再次打开窗口时,`JPanel`会被重绘,这时候就需要重新绘制图像。
为了避免这种情况,你可以使用`BufferedImage`类创建一个缓冲图像,然后在缓冲图像上绘制图像。这样在窗口最小化或不可见时,绘制的图像将会被保留在缓冲图像中。当窗口再次可见时,你只需要将缓冲图像绘制在`JPanel`上即可。
以下是一个简单的例子,演示如何在`JPanel`上使用缓冲图像绘制图像:
```java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DrawingOnPanel {
public static void main(String[] args) {
JFrame frame = new JFrame();
MyPanel panel = new MyPanel();
frame.add(panel);
frame.setSize(400, 400);
frame.setVisible(true);
}
static class MyPanel extends JPanel {
private BufferedImage image;
MyPanel() {
// 创建一个大小为400x400的缓冲图像
image = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
// 在缓冲图像上绘制图像
Graphics g = image.getGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, 400, 400);
g.setColor(Color.RED);
g.drawRect(100, 100, 200, 200);
g.setColor(Color.BLUE);
g.drawOval(150, 150, 100, 100);
g.dispose();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// 将缓冲图像绘制在JPanel上
g.drawImage(image, 0, 0, null);
}
}
}
```
在上面的例子中,我们创建了一个`JFrame`窗口和一个`MyPanel`面板。在`MyPanel`面板中,我们使用`BufferedImage`类创建了一个大小为400x400的缓冲图像,并在缓冲图像上绘制了一个矩形和一个圆形。在`paintComponent()`方法中,我们将缓冲图像绘制在`JPanel`上。这样,即使你最小化了窗口或将窗口覆盖在其他窗口上,绘制的图像也会保留在缓冲图像中,当窗口再次可见时,图像会被绘制在`JPanel`上。
阅读全文