gpt4 book ai didi

java - JPanel 只显示一小部分图形

转载 作者:行者123 更新时间:2023-12-01 05:04:46 26 4
gpt4 key购买 nike

这是我在 stackoverflow 上发表的第一篇文章,所以我希望我以正确的方式做到这一点。

无论如何,我正在尝试在 JFrame 内创建一个 JPanel 并在该面板内绘制一个网格。因此,我重写了paintComponents()方法来做到这一点。我尝试设置该面板的首选尺寸以及最小尺寸,但无论我做什么,它都只显示该面板的 12x12 部分。

这是我的网格类:

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

这就是它的样子(注意左上角的 12x12 红色方 block ,它应该是网格): http://imageshack.us/a/img818/3545/49409190.png

面板本身的大小已正确调整,但图形未填充它。我不知道,也许我忽略了一些简单的事情,但现在我不知道该怎么做。我怎样才能让它绘制整个网格?

编辑:啊现在我觉得很愚蠢。我的错误是将 getter 命名为“getWidth”和“getHeight”,它们覆盖了 JComponent 中的方法。重命名它们后,它工作得很好。

最佳答案

我知道出了什么问题了。我分别将宽度和高度的 getter 称为“getWidth()”和“getHeight()”,这覆盖了从 JPanel 继承的方法。将它们重命名为不同的名称后,它起作用了:)不过还是谢谢大家的回复!

关于java - JPanel 只显示一小部分图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12878890/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com