Java 如何将JLabel放置在JFrame中的特定位置?
我们将要创建一个基于在线的空间入侵者游戏,带有实现的图形。我一直在阅读关于JFrames、JPanels和JLabels的文章,目的是创建一个带有网格的窗口,在其中放置船只和怪物 所以,事情是这样的,我一直在浏览现有的不同布局,但似乎没有什么真正符合我们的目的。我想要一个简单的JFrame,可以将JLabel对象放置在某个位置(使用setBounds()、setLocation()或类似的东西)。这需要setLayout(null),我听说这不是一个好的解决方案?我想让对象的大小固定为30x30px,窗口大小固定为600x600px(给我一个20*20的网格) 无论如何,我一直试图让它与setLayout(null)一起工作,但没有任何结果。如果我应用一个布局,比如FlowLayout,船是可见的,但卡在左边、中间或中间Java 如何将JLabel放置在JFrame中的特定位置?,java,swing,jframe,jlabel,Java,Swing,Jframe,Jlabel,我们将要创建一个基于在线的空间入侵者游戏,带有实现的图形。我一直在阅读关于JFrames、JPanels和JLabels的文章,目的是创建一个带有网格的窗口,在其中放置船只和怪物 所以,事情是这样的,我一直在浏览现有的不同布局,但似乎没有什么真正符合我们的目的。我想要一个简单的JFrame,可以将JLabel对象放置在某个位置(使用setBounds()、setLocation()或类似的东西)。这需要setLayout(null),我听说这不是一个好的解决方案?我想让对象的大小固定为30x30
public class GUI extends JFrame {
JPanel p = new JPanel(null);
public GUI() {
try{
this.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("graphics/bg.png")))));
}catch(IOException e) {
System.out.println("Image does not exist");
}
this.setLayout(null);
this.setResizable(false);
this.setSize(600,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public void placeShip1() {
ImageIcon ship2 = new ImageIcon("graphics/ship2.png");
JLabel imageLabel = new JLabel(ship2);
imageLabel.setBounds(200,200,30,30);
p.add(imageLabel);
p.setOpaque(false);
p.setSize(600, 600);
this.add(p);
this.setVisible(true);
}
}
我真的不明白为什么它不起作用。我的意思是,我想要的是我的JFrame,它有一个背景图像,在某个位置上有一个对象,但是对象根本不显示
想要使用setLayout(null)的主要原因是,我想使用一种方法将网格坐标转换为JFrame,只需将每个坐标映射到相应的单元格 “我们将要创建一个基于在线的空间入侵者游戏,带有实现的图形”-这自动向我建议,您不想使用
JLabel
或任何其他组件(除了JPanel
作为主渲染面),而是要开始学习如何执行自定义绘制,这将给你更多的控制权(并且问题更少)。首先看一看,了解更多详细信息您遇到的问题很大程度上取决于布局管理API的工作方式,因此,删除它后,您将开始遇到其他问题。通常,在更改UI后,您会使用revalidate
和repaint
,但是revalidate
与布局管理API相关。另外,我看不到您正在使用的placeShip1
非常感谢!我怀疑是这样的,因为JFrame似乎更关注交互界面,如菜单等,而“placeShip1”是从另一个类调用的。我只是觉得没有必要包括在内。:)更重要的是,你所说的控件JFrame
(和JPanel
,我建议您从这里开始)只是容器