开发者社区 问答 正文

调用类中的JFrame

我正在用Java swing制作2D游戏。我试着进行方形移动,但没有加载任何内容,因为我不记得方形Java上的类了。

public class tile {
    tile(int widthScreen, int heightScreen) throws IOException {

        JFrame tileframe = new JFrame("tileframe");
        tileframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

        FirstLevel connect = new FirstLevel(widthScreen, heightScreen, tileframe);
public FirstLevel(int widthScreen, int heightScreen, JFrame tileframe)   // Constructor is passed the size of the parent frame
    {
//        // Start the timer
//        shapeTimer.start();

        addKeyListener(this);
        setFocusable(true);
        setFocusTraversalKeysEnabled(false);

        xBound = (windowWidth - squareSize);
        yBound = (windowHeight - squareSize);
    }

我运行游戏,但无法正常工作。JFrame不会被召回

展开
收起
垚tutu 2019-11-28 18:46:17 634 分享 版权
阿里云 AI 助理回答

在Java Swing中,创建一个可移动的方形并显示在JFrame上,你需要确保几个关键点被正确实现。从你的代码片段来看,你已经尝试定义了一个tile类和一个FirstLevel类,但似乎缺少了实际绘制方形以及处理键盘事件来移动方形的逻辑。下面是一个简化的例子,展示了如何在一个Swing应用中实现一个可移动的方形:

首先,确保你的方形(或任何形状)能够被绘制。通常,我们会使用JPanelpaintComponent(Graphics g)方法来完成绘制任务。

import javax.swing.*;
import java.awt.*;

public class MovingSquare extends JPanel implements KeyListener {

    private int squareSize = 50; // 方形的大小
    private int x = 50; // 方形初始X坐标
    private int y = 50; // 方形初始Y坐标

    public MovingSquare() {
        setFocusable(true);
        addKeyListener(this);
        setPreferredSize(new Dimension(800, 600)); // 设置面板尺寸
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLUE); // 设置颜色
        g.fillRect(x, y, squareSize, squareSize); // 绘制方形
    }

    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        switch (keyCode) {
            case KeyEvent.VK_UP:    y -= 10; break;
            case KeyEvent.VK_DOWN:  y += 10; break;
            case KeyEvent.VK_LEFT:  x -= 10; break;
            case KeyEvent.VK_RIGHT: x += 10; break;
        }
        repaint(); // 重绘以更新画面
    }

    // KeyListener的其他方法需要实现,即使它们在这里不做任何事
    @Override
    public void keyTyped(KeyEvent e) {}
    @Override
    public void keyReleased(KeyEvent e) {}

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("Moving Square");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(new MovingSquare());
            frame.pack();
            frame.setVisible(true);
        });
    }
}

这个例子中,我们创建了一个名为MovingSquare的类,它继承自JPanel并实现了KeyListener接口。在paintComponent方法中,我们绘制了一个蓝色的方形,并在keyPressed方法中根据键盘输入改变方形的位置,最后调用repaint()方法来更新界面。

请注意,为了使键盘监听生效,你需要确保窗口获得了焦点。在上面的例子中,通过setFocusable(true)requestFocusInWindow()(虽然未直接展示,但在实际应用中可能需要调用)来实现这一点。

请尝试将上述代码与你的项目结合,或者作为参考来修改你的现有代码,以实现方形的移动功能。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: