JavaSwingJPanel。我怎样画形状?

JavaSwingJPanel。我怎样画形状?,java,swing,jpanel,Java,Swing,Jpanel,我已经实现了一个类DrawingPane扩展了JPanel来绘制一些形状。我在内部为每种类型的形状创建了一个单独的方法,例如圆: public void paintCircles(Graphics g) { super.paint(g); 但是,我无法通过引用classDrawingPane从另一个类调用此函数。如何做到这一点?如果这种方法不可行,我如何调用单个方法来绘制每种类型的形状,因为不同形状的代码要求不同 此外,方法scrollRectToVisible from

我已经实现了一个类
DrawingPane扩展了JPanel
来绘制一些形状。我在内部为每种类型的形状创建了一个单独的方法,例如圆:

public void paintCircles(Graphics g) {
           super.paint(g);
但是,我无法通过引用class
DrawingPane
从另一个类调用此函数。如何做到这一点?如果这种方法不可行,我如何调用单个方法来绘制每种类型的形状,因为不同形状的代码要求不同


此外,方法scrollRectToVisible from class
JPanel
不适用于对象
RoundRectangle2D.Double
。如何使这些形状也可见

您可以将
图形
转换为
Graphics2D
,并使用
public void draw(Shape s)
方法传递所有的
Shape
s。对于任何
形状
您可以使用
公共矩形getBounds()
并将
矩形
传递给scrollRectToVisible。

您可以将
图形
强制转换为
图形2D
,并使用
公共无效绘制(形状s)
方法传递所有
形状
。对于任何
形状
,您可以使用
公共矩形getBounds()
并将
矩形
传递给scrollRectToVisible。

您需要在
绘图窗格中实现
绘图组件(图形g)
,并且您可以使用
绘图(形状s)
绘制任何形状:

public void paintComponent(Graphics g) {
        super.paintComponent(g); 
        Graphics2D g2 = (Graphics2D)g;    
        g2.draw(yourShape);
}

您需要在
DrawingPane
中实现
paintComponent(Graphics g)
,并且可以使用
draw(Shape s)
绘制任何形状:

public void paintComponent(Graphics g) {
        super.paintComponent(g); 
        Graphics2D g2 = (Graphics2D)g;    
        g2.draw(yourShape);
}

完成教程。如果你不能从中找到答案,我建议你准备并发布一份你的最佳尝试。完成教程。如果你不能从中找出答案,我建议你准备并发布一份你的最佳尝试。好的,正如你所描述的,我仍然需要在paintComponent中检查调用哪个方法的If-else-If,因为我必须在paintComponent中插入应用于每个形状的所有方法,比如paintCircle,paintRectangles等。我是否可以调用适当的一个(例如paintCircle),而不使用if-else,如果是从类外,即从类滚动窗格中调用?@arjacsoh:不,我已更新了我的答案,您可以使用
draw(Shape s)
绘制任何形状,例如直线、矩形、圆或您想要的形状。@arjacsoh,带逻辑或不带逻辑,你从来没有从外面的任何班级打电话给paintXX。。。这不是Swing绘画的工作原理,请阅读教程,Andrew已经建议过。好的,正如您所描述的,我仍然需要在paintComponent中检查调用哪个方法的if-else-if,因为我必须在paintComponent中插入应用于每个形状的所有方法,比如paintCircle,paintRectangles等。我是否可以调用适当的一个(例如paintCircle),而不使用if-else,如果是从类外,即从类滚动窗格中调用?@arjacsoh:不,我已更新了我的答案,您可以使用
draw(Shape s)
绘制任何形状,例如直线、矩形、圆或您想要的形状。@arjacsoh,带逻辑或不带逻辑,你从来没有从外面的任何班级打电话给paintXX。。。这不是Swing绘画的工作原理,请阅读教程,Andrew已经建议过了。