【问题标题】:Why is my JPanel or JFrame not appearing?为什么我的 JPanel 或 JFrame 没有出现?
【发布时间】:2014-02-08 18:57:48
【问题描述】:

我正在制作游戏。项目中有3个不同的文件,有一个文件叫Dude、Frame和Board。那么任何人都可以帮助我吗?编码: 董事会代码:
打包我们的游戏;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Board extends JPanel implements ActionListener{
Dude p;
Image img;
Timer time;

    public Board() {
    p = new Dude();
    addKeyListener(new AL());
    setFocusable(true);
    ImageIcon i = new ImageIcon("/Users/appleuser/Desktop");
    img = i.getImage();
    time = new Timer(5, this);
    time.start();
    }
    public void actionPerformed(ActionEvent e) {
        p.move();
    repaint();
    }

    public void paint(Graphics g) {
    super.paint(g);
        Graphics2D g2d = (Graphics2D) g;

        g2d.drawImage(img, 0, 0, null);
        g2d.drawImage(p.getImage(), p.getX(), p.getY(), null);
    }

    private class AL extends KeyAdapter {
    public void keyReleased(KeyEvent e) {
    p.keyReleased(e);
    }
    public void keyPressed(KeyEvent e) {
    p.keyPressed(e);
    }
    }
}

Dude 的代码:

    package Ourgame;

    import java.awt.Image;
    import java.awt.event.KeyEvent;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;

    public class Dude {
        int x, dx, y;
        Image still;

    public Dude() {
        ImageIcon i = new ImageIcon("/Users/appleuser/Desktop/the man.bmp");
        still = i.getImage();
        x = 10;
        y = 172;
    }

    public void move() {
        x = x + dx;

    }
    public int getX() {
        return x;
    }
    public int getY() {
        return y;
    }

    public Image getImage() {
        return still;
    }

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

        if(key == KeyEvent.VK_LEFT);
        dx = -1;

        if(key == KeyEvent.VK_RIGHT)
        dx = 1;

    }

public void keyReleased(KeyEvent e) {
    int key = e.getKeyCode();

    if(key == KeyEvent.VK_LEFT);
    dx = 0;

    if(key == KeyEvent.VK_RIGHT)
    dx = 0;

}



}

框架代码:

package Ourgame;

import javax.swing.JFrame;

public class Frame {

    public static void main(String[] args){
    JFrame frame = new JFrame("2D game");
    frame.add(new Board());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(1200, 365);
    frame.setVisible(true);
    }
}

【问题讨论】:

  • 为什么要将桌面加载为图像?
  • 这个终端分号会搞砸你:if(key == KeyEvent.VK_LEFT);。在整个代码中去掉这个和类似的分号。始终将所有代码块放在大括号中,甚至是单行块。
  • 另外,调试您的图像路径。您最好将它们作为资源而不是文件。还可以使用调试器来确定您的问题所在,并发布您的程序遇到的问题的更详细描述。
  • @HovercraftFullOfEels 是对的,因为你的 if 语句在它们后面加上了大括号。您在 if 语句的右大括号后显示了两个分号实例。这可能会导致问题。
  • @Obicere 我不是,我正在尝试加载桌面上的图片。

标签: java swing netbeans jframe jpanel


【解决方案1】:

您可能只需要调用 JFrame.pack()。布局管理器可能没有设置板的边界。试试:

frame.getContentPane().add(new Board());
frame.pack();
frame.setVisible(true);

如果这不起作用,那么我建议您遵循此处的其他建议:使用调试器和/或检查您的图像路径。 “/Users/appleuser/Desktop”绝对不是图片。

【讨论】:

  • update 我确实输入了正确的图像路径,但我的 JPanel 或 JFrame 仍然没有出现。我做了 setVisible(true);但我仍然不可见。
  • 我不是这么说的。 setVisible() 已经在那里了。我说你可能需要添加pack()
  • 我复制并粘贴了它,但什么也没有发生。我吓坏了!大声笑!
  • 尝试更改您的绘制方法以仅用颜色填充组件,例如使用 g2.setColor(Color.BLACK) 和 g2.fillRect(0,0,getWidth(),getHeight()) 来查看您的面板大小是否正确。如果出现颜色,则说明您的图像有问题。
  • 我做了,但什么都不会发生。 JFrame 没有弹出。
【解决方案2】:

尝试在 EDT 上调用您的 Swing 代码:

package Ourgame;

import javax.swing.JFrame;

public class Frame
{
  public static void main(String[] args)
  {
    SwingUtilities.invokeLater( new Runnable()
    {
      @Override
      public void run()
      {
        JFrame frame = new JFrame("2D game");
        frame.add(new Board());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1200, 365);
        frame.setVisible(true);
      }
    });
  }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-10-20
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多