2015-04-21 73 views
2

我正在使用java awt渲染一個簡單的矩形。我也有一個矩形作爲窗口的背景。事情是,即使背景矩形設置爲窗口的寬度和高度,它仍然不適合整個事情。我試圖谷歌這一點,但發現與我的需求無關的結果。這是什麼造成的?如何在awt中填充整個窗口

import java.awt.Canvas; 
import java.awt.Dimension; 
import java.awt.Graphics2D; 
import java.awt.event.MouseAdapter; 
import java.awt.image.BufferStrategy; 
import java.awt.Color; 

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


public class Game implements Runnable{ 

    final int WIDTH = 640; 
    final int HEIGHT = 480; 

    JFrame frame; 
    Canvas canvas; 
    BufferStrategy bufferStrategy; 

    boolean running = false; 

    public Game(){ 
     frame = new JFrame("Prototyping"); 

     JPanel panel = (JPanel) frame.getContentPane(); 
     panel.setPreferredSize(new Dimension(WIDTH, HEIGHT)); 
     panel.setLayout(null); 


     canvas = new Canvas(); 
     canvas.setBounds(0, 0, WIDTH, HEIGHT); 
     canvas.setIgnoreRepaint(true); 

     panel.add(canvas); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setResizable(false); 
     frame.setVisible(true); 

     canvas.createBufferStrategy(2); 
     bufferStrategy = canvas.getBufferStrategy(); 

     canvas.requestFocus(); 
    } 



    public void run(){ 

     running = true; 
     while(running)   
     render(); 
    } 

    private void render() { 
     Graphics2D g = (Graphics2D) bufferStrategy.getDrawGraphics(); 
     g.clearRect(0, 0, WIDTH, HEIGHT); 
     render(g); 
     g.dispose(); 
     bufferStrategy.show(); 
    } 

    protected void update(){ 

    } 

    protected void render(Graphics2D g){ 
     g.setColor(Color.GRAY); 
     g.fillRect(0, 0, WIDTH, HEIGHT); 

     g.setColor(Color.BLUE); 
     g.fillRect(100, 0, 200, 200); 
    } 

    public static void main(String [] args){ 
     Game game = new Game(); 
     new Thread(game).start(); 
    } 

} 
+2

*「..即使將背景矩形設置爲窗口的寬度和高度,它仍然不適合整個事情。」*等等..什麼?灰色矩形填充UI(此處)。藍色矩形故意繪製得比UI小。另外:Java GUI必須適用於不同的OS,屏幕大小,屏幕分辨率等。因此,它們不利於像素的完美佈局。請使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556)以及[white space]的佈局填充和邊框(http://stackoverflow.com/a/17874718/ 418556)。 –

+0

@AndrewThompson欣賞鏈接。雖然我看到的問題是側面的空白:http://i.imgur.com/fcn7Ggx.gif。我認爲這與空佈局有關? –

+0

哦,我的壞..我想我可能已經添加了佈局,然後再看結果。改變'panel.setLayout(null);'到'panel.setLayout(new GridLayout());'看看它是否變好.. @ –

回答

2

這在這裏工作完美無瑕。因爲我忘記了改變了什麼,所以仔細閱讀它們的差異。

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

public class Game implements Runnable{ 

    final int WIDTH = 640; 
    final int HEIGHT = 480; 

    JFrame frame; 
    Canvas canvas; 
    BufferStrategy bufferStrategy; 

    boolean running = false; 

    public Game(){ 
     frame = new JFrame("Prototyping"); 

     JPanel panel = (JPanel) frame.getContentPane(); 
     panel.setPreferredSize(new Dimension(WIDTH, HEIGHT)); 
     panel.setLayout(new GridLayout()); 


     canvas = new Canvas(); 
     //canvas.setBounds(0, 0, WIDTH, HEIGHT); 
     canvas.setIgnoreRepaint(true); 

     panel.add(canvas); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setResizable(false); 
     frame.setVisible(true); 

     canvas.createBufferStrategy(2); 
     bufferStrategy = canvas.getBufferStrategy(); 

     canvas.requestFocus(); 
    } 

    public void run(){ 
     running = true; 
     while(running)   
     render(); 
    } 

    private void render() { 
     Graphics2D g = (Graphics2D) bufferStrategy.getDrawGraphics(); 
     g.clearRect(0, 0, WIDTH, HEIGHT); 
     render(g); 
     g.dispose(); 
     bufferStrategy.show(); 
    } 

    protected void render(Graphics2D g){ 
     g.setColor(Color.GRAY); 
     g.fillRect(0, 0, WIDTH, HEIGHT); 

     g.setColor(Color.BLUE); 
     g.fillRect(100, 0, 200, 200); 
    } 

    public static void main(String [] args){ 
     Game game = new Game(); 
     new Thread(game).start(); 
    } 
}