Java 如何在awt中填充整个窗口

Java 如何在awt中填充整个窗口,java,swing,awt,java-2d,Java,Swing,Awt,Java 2d,我正在使用JavaAWT渲染一个简单的矩形。我还有一个矩形作为窗口的背景。问题是,即使背景矩形设置为窗口的宽度和高度,它仍然不适合整个窗口。我试着用谷歌搜索,但发现搜索结果与我的需求无关。这是什么原因造成的 import java.awt.Canvas; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.event.MouseAdapter; import java.awt.image.BufferStr

我正在使用JavaAWT渲染一个简单的矩形。我还有一个矩形作为窗口的背景。问题是,即使背景矩形设置为窗口的宽度和高度,它仍然不适合整个窗口。我试着用谷歌搜索,但发现搜索结果与我的需求无关。这是什么原因造成的

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();
   }

}

这在这里工作完美无瑕。仔细检查一下,看看有什么不同,因为我已经忘记了改变了什么

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();
   }
}

“。即使背景矩形设置为窗口的宽度和高度,它仍然不适合整个窗口。”等等..什么?灰色矩形填充UI(此处)。故意绘制的蓝色矩形比UI小。另一方面:Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作。因此,它们不利于像素完美布局。请改为使用布局管理器,或与布局填充和边框一起使用。@andrewhompson欣赏这些链接。虽然我看到的问题是侧面的空白:。我想这与空布局有关?哦,糟糕。。我想我可能在看到结果之前添加了一个布局。更改
panel.setLayout(null)
面板.setLayout(新的GridLayout())
然后看看它是不是好的..@andrewhompson也没有这样做。