这是代码,当图像被放到背景上时,无论我添加什么代码移动它,它都会一直粘在左墙上。我试过了setLocation和setBounds。我想要做的就是将图像移到左下角,但不要完全放在框架的墙壁上。
JFrame window = new JFrame();
window.setSize(800,480);
window.setTitle("Battle");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setLayout(new BorderLayout());
JLabel background = new JLabel();
ImageIcon icon = new ImageIcon("background2.png");
background.setIcon(icon);
background.setLayout(new BorderLayout());
window.setContentPane(background);
JLabel p1 = new JLabel();
p1 = a.getImage();
background.add(p1);
p1.setLocation(500,500);
p1.setVisible(true);
window.setVisible(true);
答案 0 :(得分:3)
window.setLayout(new BorderLayout());
...
window.setContentPane(background);
第一个语句没有做任何事情,因为第二个语句取代了框架的内容窗格,布局管理器将是您为“背景”组件设置的任何布局管理器。
我想要做的就是将图像移到左下角,
您将布局管理器设置为BorderLayout,因此您需要利用BorderLayout。阅读How to Use BorderLayout上的Swing教程中的部分以获取工作示例。
因此,您需要做的第一件事是指定适当的约束以使组件显示在底部:
//background.add(p1); // defaults to BorderLayout.CENTER if no constraint is specified
background.add(p1, BorderLayout.PAGE_END);
测试此图像,图像将位于底部,但仍然居中。
所以现在你需要在标签上设置一个属性来告诉标签自己画左对齐:
label.setHorizontalAlignment(JLabel.LEFT);
没有完全在框架的墙壁上
如果图像周围需要额外的空间,则可以在标签上添加Border
。使用上面的链接阅读How to Use Borders
上教程中的部分。您可以使用EmptyBorder
来提供额外的空间。
答案 1 :(得分:1)
执行此操作的一种方法是添加额外的“左侧面板”容器,以便我们可以将标签放在左侧和底部
public static void main(String[] args) {
JFrame window = new JFrame();
window.setSize(800, 480);
window.setTitle("Battle");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel background = new JLabel();
background.setBackground(Color.gray);
background.setLayout(new BorderLayout());
background.setOpaque(true);
window.setContentPane(background);
JPanel leftPanel = new JPanel();
leftPanel.setLayout(new BorderLayout());
background.add(leftPanel, BorderLayout.WEST); // stick our left side bard to the left side of frame
JLabel p1 = new JLabel();
p1.setText("Im here");
p1.setLocation(500, 500);
p1.setVisible(true);
p1.setBackground(Color.black);
p1.setOpaque(true);
leftPanel.add(p1, BorderLayout.SOUTH); // add our label to the bottom
window.setVisible(true);
}