为什么我的组件彼此相邻出现?

Why do my components appear next to each other?

我目前正在尝试创建一个程序,使用键盘键在背景图像上移动一个矩形。我面临的问题是,当我绘制组件时,它们只是彼此相邻放置,而不是覆盖背景图像的正方形。这是显示这两个组件的代码;

    JLayeredPane panel = new JLayeredPane();
    panel.setLayout(new FlowLayout());
    add(panel);

    paintBackground pb = new paintBackground(bimg);
    panel.add(pb, 1, 0);

    paintPlayer cc = new paintPlayer(startX, startY);
    panel.add(cc, 2, 0);

    pack();
    setVisible(true);

我认为问题在于 paintPlayer 组件设置为全尺寸,并且似乎有背景。 paintPlayer 组件代码如下所示:

public Dimension getMinimumSize() {
    return new Dimension(800,600);
}

@Override
public Dimension getPreferredSize() {
    return new Dimension(800,600);
}

@Override
public Dimension getMaximumSize() {
    return new Dimension(800,600);
}

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.red);        
    System.out.println(startX + startY );
    g.fillRect(startX, startY, 30, 30);
}

我试过将组件大小设置为矩形的大小,但那样我就无法使用 fillRect 中的前两个值移动矩形。由组件 (800x600) 填充的其余 space 的背景似乎是不透明的。

添加后,组件只是并排显示,如下所示:https://gyazo.com/57245c518e02778c36ffc89ba75d5a81。如何将 paintPlayer 添加到 paintBackground 之上,使其仅覆盖背景图像上的矩形。

我已经进行了相当多的搜索,但似乎无法解决。也许与布局有关?我注意到的另一件事是,通过这样做,框架或窗格都不会从 setBackground 中受益,因为它是不可见的。 为任何帮助干杯。

这是 JLayerdPane 的默认构造函数。

public JLayeredPane() {
    setLayout(null);
}

你看它使用正常的 AbsolutLayout。如果你阅读 here:

Note: that these layers are simply a logical construct and LayoutManagers will affect all child components of this container without regard for layer settings.

你应该明白哪里不对了。检查 OverlapLayout.