Я использую java awt для рендеринга простого прямоугольника. У меня также есть прямоугольник, который будет использоваться в качестве фона окна. Дело в том, что, хотя прямоугольник фона установлен на ширину и высоту окна, он все равно не подходит для всего. Я попытался это сделать Google, но нашел результаты, не имеющие отношения к моим потребностям. Что вызывает это?Как заполнить все окно в 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();
}
}
* ".. хотя фоновый прямоугольник установлен на ширину и высоту окна, он все равно не подходит для всего." * Подождите .. что? Серый прямоугольник заполняет пользовательский интерфейс (здесь). Синий прямоугольник намеренно рисуется меньше, чем пользовательский интерфейс. В стороне: графические интерфейсы Java должны работать на разных ОС, размер экрана, разрешение экрана и т. Д. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). –
@AndrewThompson Цените ссылки. Хотя проблема, которую я вижу, это белое пространство сбоку: http://i.imgur.com/fcn7Ggx.gif. Я предполагаю, что это связано с нулевым макетом? –
О, мой плохой. Думаю, я мог бы добавить макет, прежде чем смотреть на результат. Измените 'panel.setLayout (null);' на 'panel.setLayout (новый GridLayout());' и посмотрите, хорошо ли это. –