【问题标题】:How to create a moving object(Dot) on my Jframe (Netbeans)?如何在我的 Jframe (Netbeans) 上创建移动对象(Dot)?
【发布时间】:2014-04-25 00:01:35
【问题描述】:

大家好,感谢您提前回答。我想知道如何创建一个点并使该点在我的 jFrame 上移动。这个点只能在击键时在我的 jFrame 中的网格图片上移动。如果有人可以发布一些关于如何创建“点/点”以及如何在击键时使该点在我的 jFrame 上移动的代码(作为我参考的示例),我将不胜感激。谢谢:)

【问题讨论】:

  • 嗯,我和我的兄弟是 netbeans 和编写代码的新手,所以我们不知道从哪里开始,所以我们没有尝试任何东西。 ://
  • 然后查一下。 StackOverflow 适用于尝试过某些事情并需要帮助的人。不过我可以提供几个指针...
  • " 如果有人可以发布一些代码" 这不是真正的工作方式,SO 上已经有很多示例可用。也许将您的要求分解一下,以便您可以分别找到每个方面
  • 首先查看key bindingsCustom painting in Swing2D Graphics 供初学者使用
  • 再次感谢 MadProgrammer 的帮助,并感谢其他人在我下次提问之前会更多地研究我的主题 >:D。感谢您的链接

标签: java swing netbeans


【解决方案1】:

一旦你有了一个 JFrame,你需要给它添加一个 JPanel,并将你的渲染代码放在 JPanel 的 repaint() 方法中。

我建议您查看this 示例,了解如何正确使用 JFrame。

public class MyJFrame extends JFrame implements KeyListener {

    private MyJPanel frame;

    public MyJFrame() {
        super();
        frame = new MyJPanel();
        add(frame);
        pack();
        addKeyListener(this);
        repaint();
    }

    public static void main(String[] args) {
        MyJFrame window = new MyJFrame();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);
        window.setTitle("Test");
    }

    @Override
    public void repaint() {
        super.repaint();
    }

    @Override
    public void keyPressed(KeyEvent e) {
        frame.keyPressed(e);
        repaint();
    }

    @Override
    public void keyTyped(KeyEvent e) { }

    @Override
    public void keyReleased(KeyEvent e) { }
}

这是MyJPanel 类:

public class MyJPanel extends JPanel {

    private int x = 0;
    private int y = 0;

    public MyJPanel() {
        setPreferredSize(new Dimension(200,200));
    }

    @Override
    public void update(Graphics g) {
        paint(g);
    }

    @Override
    public void paint(Graphics g) {
        g.setColor(Color.red);
        g.drawRect(x,y,1,1);
    }

    public void keyPressed(KeyEvent e) {
        int k = e.getKeyCode();

        switch (k) {
            case KeyEvent.VK_D:
                x++;
                break;
            case KeyEvent.VK_A:
                x--;
                break;
            case KeyEvent.VK_W:
                y--;
                break;
            case KeyEvent.VK_S:
                y++;
                break;
        }
    }
}

使用KeyListener 是可选的,但允许您获取键盘输入。

我知道这很长而且不是很直接,但我希望你能从这段代码中学到一些东西。如果您还有其他问题,请随时发表评论,我会尽我所能为您提供帮助。

MyJFrame 需要导入:

java.awt.event.KeyEvent;
java.awt.event.KeyListener;
javax.swing.JFrame;

MyJPanel 需要导入:

java.awt.Color;
java.awt.Dimension;
java.awt.Graphics;
java.awt.event.KeyEvent;
javax.swing.JPanel;

【讨论】:

  • 我需要为此导入任何包吗?我在 @Overide 和 keylistener 上遇到错误。
  • 是的,但我没有包含它。它在 Github 存储库中,让我找到它...
  • 1) Swing 组件应该覆盖paintComponent(Graphics) 而不是paint(Graphics),并且应该首先调用super 方法。 2) repaint() 方法覆盖毫无意义。 3) update(Graphics g) 为什么代码对这个方法做任何事情? 4) 与其为自定义绘制面板设置首选大小,不如重写默认方法。
  • @AndrewThompson 我想我明白你在说什么,但你能详细说明一下吗?
  • “但你能详细说明一下吗?” 当然可以,但我不打算写一本关于这件事的小说。那么具体你有什么理解困难? 能详细说明一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 2016-05-23
  • 2013-06-27
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
相关资源
最近更新 更多