如何在JFrame上绘制矩形和椭圆

How to draw rectangle and ellipse on JFrame

我有一个简单的问题要问你。 但我不明白为什么这不会在 JFrame 上绘制矩形和椭圆。 到目前为止,我得到了 JFrame windows,但只有灰色背景。

请说明谢谢

FrameViewer.java

import javax.swing.JFrame;

public class FrameViewer {
    JFrame frame;
    public void createFrame()
    {
        frame = new JFrame("CLOCK");
        frame.setSize(600, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //add box and ellipse on the Frame
        ClockComponent component = new ClockComponent();
        frame.add(component);

        frame.setVisible(true);
    }
}

ClockComponent.java

import java.awt.Rectangle;
import java.awt.Graphics2D;
import java.awt.Graphics;
import java.awt.FontMetrics;
import java.awt.Font;
import java.awt.BasicStroke;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Ellipse2D.Double;
import javax.swing.JComponent;

public class ClockComponent extends JComponent{
    Rectangle square;
    Ellipse2D.Double ellipse;

    public void createComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D) g;
        //create rectangle
        square = new Rectangle(100, 100, 100, 100);
        g2.draw(square);

        //create ellipse
        ellipse = new Ellipse2D.Double(5, 10, 100, 150);
        g2.draw(ellipse);
    }

}

AnalogClock.java

public class AnalogClock {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        FrameViewer clock = new FrameViewer();
        clock.createFrame();
    }
}

在您的 ClockComponent class 中,而不是 createComponent(...) 方法中,添加:

protected void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    //create rectangle
    square = new Rectangle(100, 100, 100, 100);
    g2.draw(square);

    //create ellipse
    ellipse = new Ellipse2D.Double(5, 10, 100, 150);
    g2.draw(ellipse);
}

您可以将 Class ClockComponent 扩展到 JApplet

而不是扩展到 JComponent

然后...

你的AnalogClock.Javaclass没问题

ClockComponent.java : 可以扩展到 JAppletoverridepaint 函数。

import java.awt.Rectangle;
import java.awt.Graphics2D;
import java.awt.Graphics;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.geom.Ellipse2D;
import javax.swing.JApplet;


public class ClockComponent extends JApplet{
    Rectangle square;
    Ellipse2D.Double ellipse;


    @Override
    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;

        g2.setPaint(Color.BLACK);
        g2.setStroke(new BasicStroke(5.0f));// thickness of the line
        g2.draw(new Ellipse2D.Double(50, 50, 250, 250)); //(x point, y point, width, height)
    }
}

然后FrameView.java : 文件也应该编辑如下

import java.awt.Dimension;
import javax.swing.JApplet;
import javax.swing.JFrame;

public class FrameView {
    JFrame frame;
    public void createFrame()
    {
        frame = new JFrame("CLOCK");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        JApplet applet = new ClockComponent();
        frame.getContentPane().add(applet);
        frame.pack();
        frame.setSize(new Dimension(400, 400));
        frame.setVisible(true);
    }
}

有很多方法可以完成这项任务,这只是绘制 2D 的一种方法

希望对您有所帮助!!