Java 使用JLayer在图像上放置网格
我想在图像上放置一个网格。我使用了一个Java 使用JLayer在图像上放置网格,java,swing,jlayer,Java,Swing,Jlayer,我想在图像上放置一个网格。我使用了一个JLabel来保存图像,它使用paintComponent方法,因为图像在我的项目的不同阶段会发生变化,对于JLayer类GridDrawer扩展LayerUI,这有助于绘制网格(对于较小的示例,我只使用了drawRect()方法) 我的代码: GridPhoto(主要)类别: GUI类: package gridphoto; import java.awt.image.BufferedImage; import java.awt.B
JLabel
来保存图像,它使用paintComponent
方法,因为图像在我的项目的不同阶段会发生变化,对于JLayer
类GridDrawer扩展LayerUI
,这有助于绘制网格(对于较小的示例,我只使用了drawRect()
方法)
我的代码:
GridPhoto(主要)类别:
GUI类:
package gridphoto;
import java.awt.image.BufferedImage;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JLayer;
import javax.swing.plaf.LayerUI;
public class GUI {
JFrame frame;
JPanel panel;
JLayer<JLabel> GridLayer;
JLabel imagelabel;
LayerUI<JLabel> GridUI;
BufferedImage img;
public GUI() throws IOException {
frame = new JFrame("GridImage Test");
panel = new JPanel();
img = ImageIO.read(new File("/Users/VJ/Desktop/gs.png"));
imagelabel = new JLabel() {
public void paintComponent(Graphics g) {
g.drawImage(img.getScaledInstance(500, 500, BOTTOM), 0, 0, null);
}
};
GridUI = new GridDrawer();
GridLayer = new JLayer(imagelabel, GridUI);
panel.setLayout(new BorderLayout());
frame.setLayout(new BorderLayout());
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 700);
panel.add(GridLayer);
frame.add(panel);
frame.setVisible(true);
}
public class GridDrawer extends LayerUI<JLabel> {
public void paintComponent(Graphics g) {
g.drawRect(0, 0, 250, 250);
}
}
}
package-gridphoto;
导入java.awt.image.buffereImage;
导入java.awt.BorderLayout;
导入java.awt.Graphics;
导入java.io.File;
导入java.io.IOException;
导入javax.imageio.imageio;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JLayer;
导入javax.swing.plaf.LayerUI;
公共类GUI{
JFrame框架;
JPanel小组;
JLayer网格层;
JLabel图像标签;
莱瑞·格里迪;
缓冲图像img;
公共GUI()引发IOException{
帧=新JFrame(“GridImage测试”);
panel=新的JPanel();
img=ImageIO.read(新文件(“/Users/VJ/Desktop/gs.png”);
imagelabel=新的JLabel(){
公共组件(图形g){
g、 drawImage(img.getScaledInstance(500500,底部),0,0,null);
}
};
GridUI=新的GridDrawer();
GridLayer=新的JLayer(imagelabel,GridUI);
panel.setLayout(新的BorderLayout());
frame.setLayout(新的BorderLayout());
frame.setresizeable(false);
frame.setLocationRelativeTo(空);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架设置尺寸(500700);
panel.add(GridLayer);
框架。添加(面板);
frame.setVisible(true);
}
公共类GridDrawer扩展了{
公共组件(图形g){
g、 drawRect(0,0,250,250);
}
}
}
我的问题是,即使将JLayer
添加到JPanel
中,它也只显示图像,而不显示网格。
例如,GridDrawer
类的paintComponent
方法仅绘制一个矩形
请告诉我我的代码有什么问题,或者除了使用JLayer
将网格放置在图像上之外,还有其他方法吗
输出。
LayerUI
没有paintComponent(…)
方法
每当重写方法时,请确保使用@override
,以便知道您正在重写正确的方法:
@Override
public void paint(...)
别忘了调用super.paint(…)
阅读上的Swing教程以了解更多信息和工作示例。是的,我知道这一点,很抱歉,但即使使用paint()方法也没有任何作用。@JaymitDesai,您的代码与教程中工作示例中的代码有何不同?发布更新的代码,包括用于执行类的main()方法,以便人们可以进行测试。添加了具有main方法的类。@JaymitDesai,您发布的代码仍在使用paintComponent()。你做了什么来调试你的代码?你看了工作示例了吗?您是否修改了工作示例。做一些基本的调试。努力吧,我们不是来为你工作的!!!使用super.paint()解决了这个问题,很抱歉我发了一篇帖子,我会确保下次我会按照规则创建一篇。1)为了更快地获得更好的帮助,发布一篇(最简单的完整可验证示例)或(简短、自含、正确的示例)。该代码需要一个main(String[])
才能在屏幕上显示为“完整”。2) 获取示例图像的一种方法是热链接到中看到的图像。
@Override
public void paint(...)