我需要为我的图片设置一个确切的位置,但它不会移动?

时间:2014-05-02 02:57:33

标签: java image location frame jlabel

我正在制作游戏并遇到一些问题。现在我得到了我想要在画面上使用的图像/角色,但是它出现在屏幕的顶部并且它不会移动。我需要能够使用坐标才能放置在我想要的位置。我我到处看,但没有一个代码看起来像我的。我也是Java的新手,所以请尽可能具体。 这是我的代码:

头等舱:

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.*;
public class JumpyBoy {

    public static void main(String[] args) {
        JFrame frame = new JFrame ("Boy");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setPreferredSize (new Dimension (1000, 700));
        Boy panel = new Boy();

        frame.getContentPane().add(panel);
        frame.pack();
        frame.setVisible(true);

    }

}

图片的类:

import javax.swing.*;
import java.awt.*;
import java.awt.Dimension;
public class Boy extends JPanel {

    JLabel Boy1;
    ImageIcon Boy;

    public Boy () {
        setBackground (Color.white);

        Boy = new ImageIcon("Boy.png");
        Boy1 = new JLabel (Boy, SwingConstants.CENTER);
        Dimension size = Boy1.getPreferredSize();
        Boy1.setBounds(200, 400, 32, 321);
        //right here what should I do ^

        JPanel panel = new JPanel();
        panel.add (Boy1);
        add (panel);
    }
}

2 个答案:

答案 0 :(得分:1)

Swing广泛使用布局管理器,这使得设计可在多个平台和渲染环境中工作的动态用户界面成为可能。

尽管可能,以这种方式使用组件并不容易。

首先,您需要删除预先存在的布局管理器。默认情况下,JPanel使用FlowLayout,这部分是因为您干扰了您的尝试......

public Boy() {
    setLayout(null);

通过这样做,您将负责组件在面板中的定位。

接下来,您不需要JPanel中的Boy来保留JLabel,而只需将Boy1添加到Boy面板

Boy1 = new JLabel (Boy, SwingConstants.CENTER);
Boy1.setBounds(200, 400, 32, 321);

// This doesn't make sense...
//JPanel panel = new JPanel();
//panel.add (Boy1);
add (Boy1);

为各种怪异做好准备。

说了这么多,通常情况下,你不会为游戏做到这一点,它不是最有效的渲染内容的方法,但看起来很简单,但是涉及到一些开销。

通常,您可以直接将内容呈现给Graphics上下文,这样您就可以更好地控制工件的分层和定位。

请查看2D Graphics了解更多详情......

答案 1 :(得分:0)

首先,当你不熟悉java时,不要编写游戏代码或任何带gui的东西。其次,为了移动它,只需使用不同的坐标再次调用setBounds。