如何在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.Java
class没问题
ClockComponent.java : 可以扩展到 JApplet
和 override
的 paint
函数。
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 的一种方法
希望对您有所帮助!!
我有一个简单的问题要问你。 但我不明白为什么这不会在 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.Java
class没问题
ClockComponent.java : 可以扩展到 JApplet
和 override
的 paint
函数。
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 的一种方法
希望对您有所帮助!!