你好,我正在尝试使用 paintComponent 绘制一个圆圈

hello, I am trying to draw a circle by using paintComponent

圆形class

这是一个简单的圆class,只有一个构造函数。

public class Circle {

    private int radius;

    public Circle(int radius) {
        this.radius = radius;
    }

    public int getRadius() {
        return radius;
    }

    public void setRadius(int radius) {
        this.radius = radius;
    }
    
    public double getArea() {
        return Math.PI * radius * radius;
    }

    @Override
    public String toString() {
        return "cicle [radius=" + radius + ", getRadius()=" + getRadius() + ", getArea()=" + getArea() + ", getClass()="
                + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString() + "]";
    }
}

摇滚class

这是 Rock class extends JPanel,只有圆作为变量。并覆盖 paintComponent.

import javax.swing.*;
import java.awt.*;

public class Rock extends JPanel {

    private Circle circle;
    
    public Rock(Circle circle) {
        this.circle=circle;
    }

    public Circle getCircle() {
        return circle;
    }

    public void setCircle(Circle circle) {
        this.circle = circle;
    }
    
    @Override
    public void paintComponent(Graphics j) {
        super.paintComponent(j);
        j.setColor(Color.black);
        int radius=new Circle(100).getRadius();
        j.fillOval(5, 5, radius, radius);
    }

    /*
     * public void paintcomponent(Graphics g) { super.paintComponent(g);
     * g.setColor(Color.black); int radius=new Circle(100).getRadius();
     * g.fillOval(0, 0, radius, radius); }
     */
}

Gui 东西

这是我试图构建所有内容的 class。 但是当我将 Rock 对象添加到布局中时,它不会出现。

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

@SuppressWarnings("serial")
public class Gui extends JFrame implements ActionListener {
     JFrame topFrame = null; 
     GridBagLayout grid=new GridBagLayout();
     GridBagConstraints cons=new GridBagConstraints();
     Graphics j;
      Circle circle=new Circle(100);
      Rock rock;
    
    public Gui() {
          rock=new Rock(circle);
          RockGold h=new RockGold(circle);
          JLabel  lblResult=new JLabel(" Result ");

    this.setLayout(grid);
    cons=new GridBagConstraints();
    cons.gridx=1;
    cons.gridy=7;
    cons.insets=new Insets(10,10,10,0);
    
    this.add(rock,cons);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
    }
}

主要

这是主要的框架设置。

import javax.swing.JFrame;

public class main {

    public static void main(String[] args) {
    Gui gui=new Gui();
    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    gui.setSize(900, 900);
    gui.setVisible(true);
    }
}

这里有一些关于如何画圆的技巧。

  • 创建一个 class 扩展 JPanel
  • 创建JFrame的实例--不要子class它
  • 将 JPanel 添加到 JFrame。
  • 在您的面板中覆盖 paintComponent(就像您一直在做的那样)。
  • 只需使用适当的参数调用 fillOval() 或 drawOval()。

注意下面渲染提示的使用。

public void paintComponent(Graphics g) {
   super.paintComponent(g);
   Graphics2D g2d = (Graphics2D) g;
   // the following will visually smooth the edges.
   g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
       RenderingHints.VALUE_ANTIALIAS_ON);
   g2d.setColor(Color.black);
   g2d.fillOval(5,5, 100,100);
}

请在Java Tutorials

中查看绘画