java - 关于覆盖jpanelpaintcomponent和相对位置
问题描述
我正在制作一个自定义的 jpanel,就像游戏的画布一样。我正在考虑使 JPanel 具有固定大小并使用 LayoutManager 使其与中心对齐。
但现在我有以下问题:如果我在我的自定义 JPanel 中画一些东西,比如,
@Override
public synchronized void paintComponent(Graphics g) {
g.fillRect(0, 0, 10, 10);
}
我给 Graphics 对象的坐标是相对于我的 JPanel 左上角还是相对于窗口左上角的内部?(又名装饰中的矩形)
解决方案
这是我为另一个问题创建的一个简单的示例。
改变矩形的位置,看看它们在哪里结束。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class ShapesExample extends JFrame {
private static final long serialVersionUID = 1L;
private List<Rectangle> rectangles;
public ShapesExample() {
rectangles = new ArrayList<>();
rectangles.add(new Rectangle(10, 10, 20, 20));
rectangles.add(new Rectangle(41, 41, 20, 20));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Shapes Example");
add(new DrawingPanel());
pack();
setLocationByPlatform(true);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ShapesExample();
}
});
}
class DrawingPanel extends JPanel {
private static final long serialVersionUID = 1L;
public DrawingPanel() {
this.setPreferredSize(new Dimension(300, 300));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
for (Rectangle rectangle : rectangles) {
g.drawRect(rectangle.x, rectangle.y,
rectangle.width, rectangle.height);
}
}
}
}
推荐阅读
- github - 在 GitHub 中操作不当后删除了我所有的提交
- magento - 当产品名称中包含括号时,Algolia 搜索出现问题
- sql - 如何使用一个 sql 参数来表示输入数组
- wordpress - 用于在 Wordpress 子域多站点的每个子站点上提供静态内容的 nginx 配置
- python - 使用模糊模糊匹配名称(问题!)未按预期执行?
- mysql - 当数据中有空值时,sql查询从多个列中获取最新数据
- php - NodeJS 中的 Mcrypt RIJNDAEL_128 算法创建的结果与 Java 和 PHP 不同
- javascript - 如何让一个对象使用来自 2 个不同类的函数?
- r - 关于 R 中的食谱包
- fpga - Arachne-pnr 内部时钟参考引脚