package donut;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import javax.swing.JPanel;
public class Board extends JPanel{
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
RenderingHints rh =
new RenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
rh.put(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2.setRenderingHints(rh);
Dimension size = getSize();
double w = size.getWidth();
double h = size.getHeight();
Ellipse2D e = new Ellipse2D.Double(0, 0, 80, 130);
g2.setStroke(new BasicStroke(1));
g2.setColor(Color.gray);
for (double deg = 0; deg < 360; deg += 5) {
AffineTransform at =
AffineTransform.getTranslateInstance(w / 2, h / 2);
at.rotate(Math.toRadians(deg));
g2.draw(at.createTransformedShape(e));
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后 实例化JFrame扩展类,其中Board对象被实例化
package donut;
import javax.swing.JFrame;
public class Donut extends JFrame {
public Donut() {
add(new Board());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(360, 310);
setLocationRelativeTo(null);
setTitle("Donut");
setVisible(true);
}
public static void main(String[] args) {
new Donut();
}
}
Run Code Online (Sandbox Code Playgroud)
我期待看到像这样的线:new Board().paint(graphicsObject)所以实际上这条线被执行或者以适当的方式在哪里实际paint(Graphics g)调用函数?
如果你想跟随调用堆栈paint(),只需写new Throwable().printStackTrace()或Thread.dumpStack(),这将允许你跟随调用堆栈.
否则,看看 RepaintManager.addDirtyRegion(JComponent, int, int, int, int);
无论如何,当你画到屏幕上时,你永远不应该调用paint/paintComponent/paintXXX方法.只打电话repaint().
你不能依赖"when"你的方法paintComponent(Graphics)或paint(Graphics)将被调用.
| 归档时间: |
|
| 查看次数: |
3855 次 |
| 最近记录: |