gpt4 book ai didi

java - 在 ImagePanel 上绘制形状

转载 作者:行者123 更新时间:2023-11-29 07:48:00 28 4
gpt4 key购买 nike

我是 swing 的新手,我一直在学习 Oracle 网站上的教程。所以我有一个 imagePanel 类,我使用它在 JPanel 上绘制图像。接下来,我需要在这张图片绘制形状。所以我在imagePanel类的paintComponent方法中调用了drawShapes函数。我面临的问题是,每当我绘制任何形状时,比如 rectoval 它都不会根据我为 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);
}

enter image description here

最佳答案

您必须了解 x、y 坐标在 Swing 自定义绘图中如何工作以定位组件。

试着理解下面的截图。

enter image description here


在这里找到一个示例代码来理解相同的概念


尝试使用此示例代码了解 x 和 y 坐标,使用 网格 分隔 10 个像素,并查看形状是否位于正确的位置?

示例代码:

class DrawPanel extends JPanel {

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
for (int i = 0; i < getHeight(); i = i + 10) {
g.drawLine(0, i, getWidth(), i);
}
for (int i = 0; i < getWidth(); i = i + 10) {
g.drawLine(i, 0, i, getHeight());
}

g.setColor(Color.RED);
g.fillOval(20, 70, 10, 10);
g.setColor(Color.GREEN);
g.fillRect(120, 40, 10, 10);
}
}

DrawPanel drawPanel = new DrawPanel();
drawPanel.setBackground(Color.WHITE);

快照:

enter image description here


编辑

使用JComponent#getPreferredSize()而不是 setPreferredSize()

阅读更多 Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?

关于java - 在 ImagePanel 上绘制形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23792823/

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