java在ImagePanel上绘制形状
我是swing新手,我一直在关注Oracle网站上的教程。所以我有一个imagePanel类,使用它,我在JPanel
上绘制一个图像。接下来,我需要在这张图像上绘制形状。因此,我调用imagePanel类的paintComponent
方法中的drawShapes
函数。我面临的问题是,无论何时我绘制任何形状,比如rect
或oval
,它都不会根据我为y轴指定的位置绘制形状。它只考虑x轴。所以理想情况下
fillOval(30,70,10,10)
等于fillOval(30,30,10,10)
我是做错了什么,还是有办法克服这个问题
public class ImagePanel extends JPanel {
private Image img;
public ImagePanel(String loc)
{
this(new ImageIcon(loc).getImage());
}
public ImagePanel(Image img) {
this.img = img;
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, null);
renderShapes(g);
}
private void renderShapes(g){
Graphics2D g2d = (Graphics2D)g;
g2d.fillOval(20,70,10,10);
g2d.fillRect(120,40,10,10);
}
}
编辑下面发布了所提供屏幕截图的renderShapes
方法
private void renderShapes(g){
Graphics2D g2d = (Graphics2D)g;
g2d.fillRect(220,50,10,10);
g2d.fillRect(20,140,10,10);
}
# 1 楼答案
您必须了解x、y坐标在Swing自定义图形中如何定位零部件
试着理解下面的截图
在这里找到一个示例代码来理解相同的概念
试着用这个示例代码来理解x和y坐标,使用10个像素分隔的网格,看看形状是否在正确的位置
示例代码:
快照:
编辑
用JComponent#getPreferredSize()代替
setPreferredSize()
阅读更多Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?