/ / JPanel pokazuje tylko niewielką część grafiki - java, swing, zmiana rozmiaru, grid, paintcomponent

JPanel pokazuje tylko niewielką część grafiki - java, swing, zmiana rozmiaru, siatka, paintcomponent

to jest mój pierwszy post tutaj na stackoverflow, więc mam nadzieję, że robię to we właściwy sposób.

W każdym razie próbuję utworzyć JPanel wewnątrzJFrame i narysuj siatkę w tym panelu. Dlatego przesłoniłem metodę paintComponents (), aby to zrobić. Próbowałem ustawić preferowany rozmiar, a także minimalny rozmiar tego panelu, ale bez względu na to, co robię, pokazuje on tylko część 12 x 12 tego panelu.

Oto moja klasa Grid:

package gui;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.Map;

import javax.swing.BorderFactory;
import javax.swing.JPanel;

import collections.MapUtils;
import executor.Robot;

public class Grid extends JPanel {
private static final long serialVersionUID = 1L;
private int rs = GUI.ROBOT_SIZE;

private final int width;
private final int height;
private final Map<Coord, Color> colors;

private int rx;
private int ry;

public Grid(int width, int height) {
this.width = width;
this.height = height;

colors = MapUtils.hashMap();
for(int i = 0; i < width; i++)
for(int j = 0; j < height; j++)
colors.put(new Coord(i, j), Color.WHITE);

rx = width/2;
ry = height/2;
setPreferredSize(new Dimension(width * rs, height * rs));
setBorder(BorderFactory.createLineBorder(Color.CYAN));
}

public int getWidth() {
return width;
}

public int getHeight() {
return height;
}

public void update(Robot robot) {
this.rx = width/2 + robot.getX();
this.ry = height/2 + robot.getY();

repaint();
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
for(Map.Entry<Coord, Color> es : colors.entrySet()) {
g.setColor(Color.RED);
//          g.setColor(es.getValue());
Coord c = es.getKey();
g.fillRect(c.getX()*rs, c.getY()*rs, rs, rs);
}

g.setColor(Color.BLACK);
for(int i = 0; i <= width; i++)
g.drawLine(i*rs, 0, i*rs, height*rs);
for(int i = 0; i <= height; i++)
g.drawLine(0, i*rs, width*rs, i*rs);

g.setColor(Color.DARK_GRAY);
g.drawOval(rx*rs, ry*rs, rs, rs);
g.setColor(Color.LIGHT_GRAY);
g.fillOval(rx*rs, ry*rs, rs, rs);
}
}

I tak to wygląda (zwróć uwagę na czerwony kwadrat 12 x 12 w lewym górnym rogu, który powinien być siatką): http://imageshack.us/a/img818/3545/49409190.png

Rozmiar panelu jest odpowiednio zmieniany, alegrafika nie wypełnia. Nie wiem, może przeoczę coś prostego, ale teraz nie wiem, co robić. Jak sprawić, by pomalował całą siatkę?

EDYCJA: Ach, teraz czuję się głupio. Moim błędem było nazwanie pobierających „getWidth” i „getHeight”, które zastępowały metody z JComponent. Po zmianie nazwy działa doskonale.

Odpowiedzi:

0 dla odpowiedzi № 1

Zrozumiałem, co było nie tak. Nazwę gettera wywołałem odpowiednio dla szerokości i wysokości „getWidth ()” i „getHeight ()”, które zastąpiły metody odziedziczone z JPanel. Po zmianie nazwy na coś innego zadziałało :) Ale dziękuję za wszystkie twoje odpowiedzi!