首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的组件会出现在彼此的旁边?

为什么我的组件会出现在彼此的旁边?
EN

Stack Overflow用户
提问于 2016-10-12 17:49:01
回答 1查看 62关注 0票数 0

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

代码语言:javascript
运行
复制
    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组件代码如下所示:

代码语言:javascript
运行
复制
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的顶部,使其只覆盖背景图像上的矩形。

我做了相当多的搜索,但我似乎找不出答案。可能和布局有关吧?我注意到的另一件事是,通过这样做,框架或窗格都不会受益于setBackground,因为它是不可见的。为任何帮助干杯。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-12 18:16:07

这是JLayerdPane的默认构造函数。

代码语言:javascript
运行
复制
public JLayeredPane() {
    setLayout(null);
}

您可以看到它使用的是正常的AbsolutLayout。如果你读到这里

注意:这些层只是一个逻辑构造,LayoutManagers将影响该容器的所有子组件,而不考虑层设置。

你应该明白是怎么回事。检查OverlapLayout

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40005151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档