关于覆盖jpanel油漆组件和相对位置



我正在制作一个自定义的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);
}
}
}
}

最新更新