我正在尝试制作一个小型绘画程序。我正在JPanel
上方JFrame
上绘制对象(我正在使用Netbeans 6.9)。我有一些基本功能,如font,line和fillRectangle。我正在使用标准方法绘制哪个覆盖paintComponent()
。
class .... extends JPanel
{
@Override
void paintComponents(Graphics g)
{
.......
}
}
问题在于,当我绘制文本时,在一个区域上划线然后它被绘制在它后面而不是它上面。基本上我想在之前在JPanel
上绘制的所有其他对象之上绘制对象。我真的不想切换到其他类型的分层窗格。一个非常天真的方法是撤消每个对象并以相反的顺序绘制它们(最后一个)。
答案 0 :(得分:6)
您需要覆盖paintComponent(Graphics g)
,不要忘记致电super.paintComponent(Graphics g);
class .... extends JPanel
{
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);//honor paintComponent an call super to draw other components that were added to the JPanel
.......
}
}
您可能还需要覆盖getPreferredSize(..)
的{{1}}并返回适当的尺寸,以便显示JPanel
:
JPanel
编辑:
根据您的工作情况,您可能还需要查看GlassPane,这样您就可以在整个class .... extends JPanel
{
@Override
public Dimension getPreferredSize()
{
return new Dimension(300,300);
}
}
窗口上设置透明窗格,并且也可以绘制,导致图形被绘制在所有其他图像之上,如下所示: