Java swing绘制对象超过其他组件

时间:2012-11-05 00:20:48

标签: java swing jpanel paintcomponent

我正在尝试制作一个小型绘画程序。我正在JPanel上方JFrame上绘制对象(我正在使用Netbeans 6.9)。我有一些基本功能,如font,line和fillRectangle。我正在使用标准方法绘制哪个覆盖paintComponent()

class .... extends JPanel
{
@Override
void paintComponents(Graphics g)
{
.......
}
}

问题在于,当我绘制文本时,在一个区域上划线然后它被绘制在它后面而不是它上面。基本上我想在之前在JPanel上绘制的所有其他对象之上绘制对象。我真的不想切换到其他类型的分层窗格。一个非常天真的方法是撤消每个对象并以相反的顺序绘制它们(最后一个)。

1 个答案:

答案 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); } } 窗口上设置透明窗格,并且也可以绘制,导致图形被绘制在所有其他图像之上,如下所示:

enter image description here