3

我正在尝试制作一个小型绘画程序。我在JPanel上面绘制对象JFrame(我使用的是 Netbeans 6.9)。我有一些基本功能,如字体、线条和填充矩形。我正在使用标准方法来绘制要覆盖的paintComponent().

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

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

4

1 回答 1

5

您将需要覆盖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(..)JPanel返回适当的大小,以便JPanel可见:

class .... extends JPanel
{
    @Override
    public Dimension getPreferredSize()
    {
        return new Dimension(300,300);
    }
}

编辑:

根据您的操作,您可能还想查看GlassPane,它允许您在整个JFrame窗口上设置一个透明窗格并且也可以绘制,这将导致图形绘制在所有其他窗格之上,如下所示:

在此处输入图像描述

于 2012-11-05T04:46:54.657 回答