有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

    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)填充的其余空间的背景似乎是不透明的

添加时,组件只是彼此相邻显示,如下所示:https://gyazo.com/57245c518e02778c36ffc89ba75d5a81。如何将paintPlayer添加到paintBackground的顶部,使其仅覆盖背景图像上的矩形

我找了不少,但似乎找不出来。也许和布局有关?我注意到的另一件事是,通过这样做,框架或窗格都不会从挫折中受益,因为它不可见。 为任何帮助干杯


共 (1) 个答案

  1. # 1 楼答案

    这是JLayerdPane的默认构造函数

    public JLayeredPane() {
        setLayout(null);
    }
    

    你看,它使用正常的绝对布局。如果你读到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