2012-10-29 88 views
1

我正在研究swing和java2D中的圖形程序的基礎知識,以便練習。我遇到了無法顯示圖像的問題。我將代碼分成4類,這樣當程序變大時,管理起來就更容易了。Java2D和Swing不使用JFrame和JPanel輸出圖像

這個想法是,我在Main中很少,Frame初始化我的第一個屏幕,屏幕可以全部細分爲他們自己的類,TitleScreen就是其中之一,PullImage完成所有緩衝工作並打印困擾我的圖像。

當我運行這個我得到一個空的窗口,沒有錯誤,所以我不知道問題出在哪裏。

請和謝謝你的幫助。

主要

package com.game.pack; 

import javax.swing.JFrame; 

public class Main extends JFrame { 

private static final long serialVersionUID = 1L; 

public final static void main(String[] args) 
{ 

    new Frame().initialize(); 
    new TitleScreen().openScreen(); 

} 
} 

框架

package com.game.pack; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Frame extends JFrame{ 

private static final long serialVersionUID = 1L; 

public final void initialize() 
{ 
    JFrame frame = new JFrame("Game"); 
    JPanel panel = new JPanel(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(800,600); 
    panel.setSize(800,600); 
    frame.setLayout(null); 
    panel.setLayout(null); 
    frame.setLocationRelativeTo(null); 
    this.getContentPane().add(panel); 
    panel.setVisible(true); 
    frame.setVisible(true); 
} 

public final void close() 
{ 
    dispose(); 
} 

} 

TitleScreen

package com.game.pack; 

public class TitleScreen { 

    public void openScreen() 
    { 
     new PullImage().printARGB("icons/titleBG.png",800,600,0,0); 
     new PullImage().printARGBFromSheet("icons/titleButtons.png", 
      200, 125, 400, 200, 200, 40, 0, 0); 
     while (1!=2) 
    { 
} 

PullImage

package com.game.pack; 

import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 
import javax.swing.ImageIcon; 

public class PullImage { 

public void printARGB(String source, int sizeX, int sizeY, int locX, int locY) 
{ 
    Image Icon = new ImageIcon(source).getImage(); 
    BufferedImage BuffedImage = new BufferedImage(sizeX, sizeY, BufferedImage.TYPE_INT_ARGB); 
    Graphics graphics = BuffedImage.getGraphics(); 
    graphics.drawImage(Icon,locX,locY,null); 
} 

public void printARGBFromSheet(String source, int sizeX, int sizeY, int locX, int locY, int width, int height, int sheetLocX, int sheetLocY) 
{ 
    Image Icon = new ImageIcon(source).getImage(); 
    BufferedImage BuffedImage = new BufferedImage(sizeX,sizeY,BufferedImage.TYPE_INT_ARGB); 
    Graphics graphics = BuffedImage.getGraphics(); 
    graphics.drawImage(Icon, locX, locY, locX+width, locY+height, sheetLocX, sheetLocY, sheetLocX+width, sheetLocY+height, null); 
} 


} 
+4

取代它到目前爲止,我已經看不出有什麼企圖向渲染任何內容到屏幕上,哪來的'paintXxx'方法?我建議你需要看看[執行自定義繪畫](http://docs.oracle.com/javase/tutorial/uiswing/painting/)和[2D圖形](http://docs.oracle。 com/javase/tutorial/2d/index.html)以獲取更多信息 – MadProgrammer

+0

我的印象是,這是由graphics.drawImage完成的。它不這樣做嗎?那它做了什麼? – user1784254

+0

1)哇!您只需在3分鐘內閱讀@MadProgrammer提及的那些教程?!? 2)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

回答

0

一個問題就出在這裏:

public final void initialize() 
{ 
    this.getContentPane().add(panel); 
} 

這是你的框架的內容窗格設置於面板,而不是你的JFrame創建。基本上你不會將它添加到實際的可見窗口中。只是

frame.getContentPane().add(panel);