2011-07-13 13 views
0

こんにちは、Javaのシアンの背景にマルチ点滅ブロックを作成するプログラムを作成しています。私はJFramesとCanvasを使用していますが、色をシアンに指定しても何らかの理由で背景が黒くなります。しかし、ボックスを移動すると、ブロックがスペースをシアンで満たしている場合、キーストーリーが表示されます。以下は私が問題に関連していると思うコードです。すべてのヘルプは非常に感謝し、これを読んでいただきありがとうございますされるだろう。(これはおそらく悪い構文とコーディングですが、私の理論はそれをprettying前にコードを動作させるためにであることに注意してください。)JFrameとCanvasを使用していると、背景がシアンではなく黒く表示されます。

GraphicsEnvironment ge = 
    GraphicsEnvironment.getLocalGraphicsEnvironment(); 
GraphicsDevice gd = ge.getDefaultScreenDevice(); 
GraphicsConfiguration gc = gd.getDefaultConfiguration(); 

// Create off-screen drawing surface 
BufferedImage bi = gc.createCompatibleImage(640, 480); 

// Objects needed for rendering... 


Graphics graphics = null; 
Graphics2D g2d = null; 

//Why isn't the background color cyan? (It's black) 
Color background = Color.CYAN; 
Random rand = new Random(); 

//The x and y positions are randomly generated as are the length and width 
int x = rand.nextInt(640/2), y = rand.nextInt(640/2); 
int w = rand.nextInt(640/2); 
int h = rand.nextInt(480/2); 





//To Do: Infinite loops suck, make a death variable 
while(true) { 
    try { 
    // clear back buffer...  

    g2d = bi.createGraphics(); 
    g2d.setColor(Color.CYAN); 
    g2d.fillRect(-1000, 1000, 1000, 1000); 

    // draw the rectangle... 
     int r = rand.nextInt(256); 
     int g = rand.nextInt(256); 
     int b = rand.nextInt(256); 
     g2d.setColor(new Color(r, g, b)); 
     g2d.fillRect(x, y, w, h); 

    //Get the newly drawn rectangles and flip 
    graphics = buffer.getDrawGraphics(); 
    graphics.drawImage(bi, x, y, canvas); 
+3

* "JFrameとCanvasを使用する" * SwingとAWT(Java以前)を混在させないでください。奇妙なことが起こります。カスタムペイントには 'JComponent'または' JPanel'を使います。 –

+1

また、すぐに役立つように、[SSCCE](http://pscode.org/sscce.html)を投稿してください。 –

+1

この[example](http://stackoverflow.com/questions/5136859/mouselistener-help-java/5137250#5137250)は、有用な出発点になる場合があります。 – trashgod

答えて

0

私はわからないんだけど私はあなたがしようとしていることを完全に理解しています。あなたがそれにキャンバスで着色JFrameシアンをしようとしている場合、これは私がやったことです:

import java.awt.Canvas; 
import java.awt.Color; 
import javax.swing.JFrame; 

public class test { 
    static JFrame frame; 
    static Canvas canvas; 

    public static void main(String[] args){ 
     frame = new JFrame(); 
     canvas = new Canvas(); 

     canvas.setBackground(Color.cyan); 
     frame.getContentPane().add(canvas); 
     frame.setVisible(true); 
    } 
} 

私はそれはあなたが実際に望んでいないだと確信しています。

+0

-1何回繰り返す必要がありますか? ** SwingとAWTを混在させないでください。**また、1)Swing GUIはEDT上に構築され、変更されるべきです。 2)行をインデントする方法を見つけたら、そこに戻して標準的な方法の1つを使用します。 –

+2

あなたは、標準的な方法の1つについて話していますか?私はそれらの括弧をインデントして設定する何百人もの人々を知っています。あなたがインデントする方法ではないからといって、それが標準ではないということを意味するわけではありませんし、私はこのようなインデントのスタイルで本をプログラミングしています。 – D347th