2013-05-28 45 views
0

我看到this video [10:00] 開始在Java中創建2d遊戲,我嘗試使用他在視頻中使用的代碼,並且出現錯誤,我不知道如何解決問題。JFrame中的錯誤

package me.Kenig.game2d; 

import java.awt.Canvas; 
import java.awt.Dimension; 

import javax.swing.JFrame; 


public class Game extends Canvas implements Runnable { 

    private static final long serialVersionUID = 1L; 

    public static final int WIDTH = 160; 
    public static final int HEIGHT = WIDTH/12*9; 
    public static final int SCALE = 3; 
    public static final String NAME = "Game"; 

    private JFrame frame; // error 

    public Game(){ 
    setMinimumSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE)); 
    setMaximumSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE)); 
    setPreferredSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE)); 
    } 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // error 


    @Override 
    public void run() { 
     // TODO Auto-generated method stub 

    } 

} 

回答

2

1)你從來沒有實例化的JFrame

嘗試

this.frame = new JFrame(); 

在構造函數

2)另一個問題:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

是不正確的地點:應該是在一個方法中。您還應該更喜歡WindowConstants.EXIT_ON_CLOSE而不是JFrame.EXIT_ON_CLOSE。 3)您還應該致電frame.pack()強制框架根據其包含的元素的大小調整其大小。

下面是一段代碼:

public Game(){ 
    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

    setMinimumSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE)); 
    setMaximumSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE)); 

    //Not really necessary because of frame.pack() 
    //setPreferredSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE)); 

    //You should add some elements here 
    JPanel panel=new JPanel(); 
    panel.add(new JTextField(10)); 

    frame.add(panel); 

    //Forces the frame to take the minimum-size to contain its elements 
    frame.pack(); 
    frame.show(); 
} 

你應該看看Visual guide to Swing components,看看哪個組件存在問題,以及他們如何做人。

你也應該看看visual guide to layout managers瞭解您的組件是如何放置

祝你好運:)

+0

添加行的作用效果這一點,但增加的錯誤遍佈頁面。 我知道這是愚蠢的,但我是新的.. – KenigOri

+0

我更新了我的答案,以發現其他問題並添加建議。 –

+0

太好了,我修好了。 我有這條線的另一個問題: 私人BufferedImage圖像=新的BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);私人詮釋[]像素=((DataBufferInt)image.getRaster()。getDataBuffer())。getData(); //錯誤 DataBufferInt無法解析爲變量 – KenigOri