我需要制作一个看起来像
的drawCircle方法public void drawCircle(int x, int y, int radius)
绘制具有该中心和半径的圆。 drawCircle方法需要调用drawOval。我不知道如何在不将Graphics传递给它的情况下从drawCircle方法调用drawOval。这可能吗?
继承我所拥有的:
import java.awt.*;
import javax.swing.*;
class test
{
public static void main(String[] args)
{
JFrame frame = new JFrame("test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new MyPanel());
frame.pack();
frame.setVisible(true);
}
}
class MyPanel extends JPanel
{
MyPanel()
{
setBackground(Color.WHITE);
setPreferredSize(new Dimension(250,250));
}
public void paintComponent(Graphics page)
{
super.paintComponent(page);
drawCircle(50,50,20);
}
private void drawCircle(int x, int y, int radius)
{
drawOval(x - radius, y - radius, radius*2, radius*2);
}
}
答案 0 :(得分:3)
您可以通过在swing组件上调用getGraphics()
来获取图形上下文。但我仍然会创建我的绘图方法来接受图形上下文。
例如
private void drawCircle(Graphics g, int x, int y, int radius) {
g.fillOval(x-radius, y-radius, radius*2, radius*2)
}
可替换地,
private void drawCircle(int x, int y, int radius) {
getGraphics().fillOval(x-radius, y-radius, radius*2, radius*2)
}
请注意getGraphics()
可以返回null
的事实。最好从paint()方法中调用drawCircle()方法并将其传递给Graphics上下文。
E.g。
public void paint(Graphics g) {
super.paint(g);
drawCircle(g, 10, 10, 5, 5);
}
答案 1 :(得分:0)
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
public static Shape getCircle(
final double x,
final double y,
final double r
) {
return new Ellipse2D.Double(x - r, y - r, r * 2, r * 2);
}
优点:
g.draw(getCircle(x, y, r));
或g.fill...
)。你说“drawCircle方法需要调用drawOval。”,但也许你只是不知道替代方法。