我有以下问题:我用java创建了这个类:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class OvalPanelCanvas extends JPanel {
public OvalPanelCanvas() {
JFrame frame = new JFrame("Oval Sample");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(this);
frame.setSize(300, 200);
frame.setVisible(true);
}
public void paintComponent(Graphics g, int a, int b) {
g.setColor(Color.black);
g.drawLine(10, 10, a, b);
}
public static void main(String args[]) {
}
}
方法paintcomponent(graphics g,int a,int b)由另一个类的函数调用:
testen.paintComponent(f,50, 50);
f是创建为公共的图形对象。当另一个类启动时,ovalpanelvanvas类的jframe启动,但调用方法时它不绘制?我现在在想为什么,因为没有错误信息。
3条答案
按热度按时间y53ybaqx1#
注意事项:
首先你应该重写
paintComponent()
方法。别忘了打电话super.paintComponent(g)
.把你的班主任交给
a
以及b
属性并从外部调用repaint()方法。看看执行自定义绘画教程。
不要设置框架的大小(或者任何swing组件的实际大小)。可以通过重写getpreferredsize()方法为面板指定默认大小。
示例:
jhdbpxl92#
它不能直接调用
paintComponent()
它不能直接创造一个Graphics
对象。Graphics
对象是由系统创建的绘画上下文,因此您只需将ovalpanelcanvas对象添加到框架和系统调用中paintComponent()
需要时自动。k3fezbri3#
你似乎对定制绘画的工作原理有一个错误的理解。老实说,我甚至不知道从哪里开始,有那么多事情看起来完全是错的。
你说的不对
paintComponent
. 正确的签名是没有其他理由。
你不应该创造
JFrame
在JPanel
建造师。在教室里做main
方法或在main
方法,就像常用的createAndShowGui()
你应该打电话来super.paintComponent
内部paintComponent
方法。如果您确实想重复重新绘制您的评论中提到的,请致电
repaint()
而不是paintComponent
方法,您永远不必这样做。它通过绘制堆栈隐式调用。如果你想改变
a
以及b
值,您应该做的是将它们作为类成员int a, b
为他们准备了餐具。喜欢然后从类中示例化
OvalCanvasPanel
,您只需设置a
以及b
,它会的repaint()
frame.add(this);
不!。应该是frame.add(new OvalCanvasPanel());
我建议你去看看定制绘画的一些例子,好的做法,和正确的绘画方法。