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

Dip*_*hra 3 java swing jpanel paintcomponent

我正在尝试制作一个小型油漆程序.我绘制在对象JPanel这是对的顶部JFrame(我使用的Netbeans 6.9).我有一些基本功能,如font,line和fillRectangle.我正在使用标准方法绘制哪个要覆盖paintComponent().

class .... extends JPanel
{
@Override
void paintComponents(Graphics g)
{
.......
}
}
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*amp 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
        .......
    }
}
Run Code Online (Sandbox Code Playgroud)

您可能还需要重写getPreferredSize(..)的JPanel并返回相应的尺寸,以便JPanel将是可见的:

class .... extends JPanel
{
    @Override
    public Dimension getPreferredSize()
    {
        return new Dimension(300,300);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

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

在此输入图像描述