如何移动卡住且不会移动的JLabel?

时间:2017-05-09 18:04:57

标签: java swing jframe jlabel

这是代码,当图像被放到背景上时,无论我添加什么代码移动它,它都会一直粘在左墙上。我试过了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);

2 个答案:

答案 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);
}

结果: enter image description here