java - JFrame中JLabel的Java定位问题
问题描述
我正在用 JLabels 创建一个 TileMap,我的问题是最后一个 Tile 放置不正确。由于某种原因,最后一个 JLabel 位于错误的位置。我认为这张图片:
并且代码解释了我的问题是什么。
顺便提一句。我正在使用 BlueJ(可能有一个错误,我不知道)
感谢帮助!!!
//create Frame
this.setSize((size+2)*imageSize+16,(size+2)*imageSize+39);
this.addKeyListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().setBackground(Color.black);
this.setVisible(true);
//create MapJLabels
for(int x = 0;x<size;x++){
for(int y = 0;y<size;y++){
mapJLabels[x][y] = new JLabel();
this.add(mapJLabels[x][y]);
mapJLabels[x][y].setSize(imageSize,imageSize);
mapJLabels[x][y].setLocation((x+1)*imageSize,(y+1)*imageSize);
mapJLabels[x][y].setVisible(true);
}
}
解决方案
该代码正在尝试设置组件的大小/位置。这意味着您使用的是空布局。不。Swing 旨在与布局管理器一起使用。你应该使用
GridLayout
. 阅读有关布局管理器的 Swing 教程部分以获取更多信息。您创建一个空的 JLabel。默认情况下,JLabel 是透明的。我现在不确定您发布的图片是根据您发布的代码创建的。我看不到网格如何填充图像等。
Swing 组件默认可见,因此不需要 setVisible(true)
您的代码尝试设置框架的大小。再说一次,不要。使用布局管理器时,您只需
pack()
自动计算框架和大小。您的代码尝试在框架和标签之间留出空间。不。如果你想要额外的空间,你可以
EmptyBorder
在面板中添加一个。阅读 Swing 教程中关于如何使用边框的部分您的代码正在使用 KeyListener。不。Swing 被设计为与键绑定一起使用
在框架可见之前,应将组件添加到框架中。
发布的代码看起来很合理,但是由于我们看不到您更改标签背景的位置或向标签添加图标的位置,因此我们不知道您的其余逻辑在做什么。问题可能就在那里。
如果您在解决上述问题后需要更多帮助,请发布一个适当的最小、可重现的示例来演示您的新问题。
推荐阅读
- jenkins - Artifactory 和 Jenkins - 获取具有最新/最大自定义属性的文件
- paypal - 促进网站用户之间的 PayPal 支付网关交易
- varnish - 使用配置文件启动 Varnish
- instagram - 有没有办法在 React Native 中实现这种效果?
- python - BeautifulSoup 在解析链接时返回空列表
- ios - 如何修复 GoogleUtilities Swift 的重复错误?
- c++ - C++ | 使用自定义类作为 unordered_map 的键
- .htaccess - 使用 haccess 将具有未知子文件夹的旧 url 重写为仅具有旧 url 中的第一个“子文件夹”的 url
- office-js-helpers - 如何通过 Officejs excel 加载项中的重定向 url 浏览器获取访问令牌
- javascript - 存储事件监听器不能与本地存储的任何更新一起工作