【问题标题】:I need to set an exact location for my image but it doesn't move?我需要为我的图像设置一个确切的位置,但它没有移动?
【发布时间】:2014-05-02 02:57:32
【问题描述】:

我正在制作一款游戏,但遇到了一些问题。现在我得到了我想在框架上使用的图像/字符,但它出现在屏幕顶部并且它不会移动。我需要能够使用坐标才能放置我想要的位置。我'我到处找,但没有一个代码看起来与我的相似。另外我对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);
    }
}

【问题讨论】:

    标签: java image location frame jlabel


    【解决方案1】:

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

    虽然可能,但以这种方式使用组件并不容易。

    首先,您需要删除预先存在的布局管理器。默认情况下JPanel 使用FlowLayout,这在一定程度上会干扰您的尝试...

    public Boy() {
        setLayout(null);
    

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

    接下来,您不需要在Boy 中使用JPanel 来保存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了解更多详情...

    【讨论】:

    • 感谢您如此具体,我会在一分钟内尝试并提供消息。老实说,我知道你不会真正将它用于游戏,但这是我们学到的全部。我在高中学习 Java 1。游戏就像 2d 飞扬的小鸟,但每次遇到岩石或其他东西时,都会有一个孩子在地上跳跃。很简单。
    • 将boy1 添加到男孩面板?但我没有男孩面板。男孩就是形象本身。我做了空的事情,图像不再出现。我猜是因为这个。
    • 不,直接将其添加到Boy 类(面板)中,不要费心将JLabel 添加到另一个JPanel 然后将其添加到Boy 窗格中
    • 这似乎无关,但我可以要你的电子邮件吗?我计划今年夏天非常认真地对待 Java,并可能涉足 Android 应用程序制作。当路上有小沟时,有人帮助我将是一种荣幸。如果您没有时间或不能,完全可以。意义重大。
    【解决方案2】:

    首先,当您是 Java 新手时,不要编写游戏或任何带有 gui 的东西。其次,为了移动它,只需用不同的坐标再次调用 setBounds 即可。

    【讨论】:

      猜你喜欢
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多