2015-04-21 90 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(); 
    } 
}