我想在屏幕上的某些坐标处放置图像标签
我使用下面的代码,但它不起作用。
此外,将注释行添加到代码时,会出现错误
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class EmiloLadderSnack
{
public static void main(String args[])
{
Graphics g;
JFrame frame=new JFrame("EmiloLadderSnack");
JPanel panel=new JPanel();
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
frame.setVisible(true);
frame.add(panel);
BufferedImage img=null;
try
{
img=ImageIO.read(new File("/media/01CCE00FA6888D80/Achieve/Eclipse/EmiloLadderSnack/src/photo.jpg"));
}
catch(IOException e)
{
//g.drawString(e.toString(), 0, 0);
}
ImageIcon icon=new ImageIcon(img);
JLabel lbl=new JLabel(icon);
lbl.setLocation(50, 50);
panel.add(lbl);
lbl.setLocation(50, 50);
}
}
请帮我解决这个问题
答案 0 :(得分:1)
您应首先向框架添加组件,然后调用pack()
,setSize()
或setVisible()
。在您的情况下,您可以在框架可见后将ImageIcon
添加到面板。添加panel.revalidate();
应解决当前问题。但是,最好先通过How to Make Frames教程。
至于第二个问题,Graphics
对象未初始化。而且,这不应该是Graphics
的使用方式。如果要在组件表面上绘制字符串,请覆盖paintComponent()并使用提供的Graphics
对象。有关详细信息,请参阅Lesson: Performing Custom Painting。否则,如果目的是简单地通知用户有关错误的信息,则可以使用JOptionPane。相关教程是How to Make Dialogs。
另外,使用绝对布局可能非常困难。查看A Visual Guide to Layout Managers以了解不同的布局管理器及其基本用法。
答案 1 :(得分:0)
setVisible(true);
应写在最后,将所有组件添加到Frame。
或写下
panel.revalidate();
将组件添加到面板后。
您的代码在这里:
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class EmiloLadderSnack
{
public static void main(String args[])
{
Graphics g;
JFrame frame=new JFrame("EmiloLadderSnack");
JPanel panel=new JPanel();
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
frame.add(panel);
BufferedImage img=null;
try
{
img=ImageIO.read(new File("/media/01CCE00FA6888D80/Achieve/Eclipse/EmiloLadderSnack/src/photo.jpg"));
}
catch(IOException e)
{
//g.drawString(e.toString(), 0, 0);
}
ImageIcon icon=new ImageIcon(img);
JLabel lbl=new JLabel(icon);
lbl.setLocation(50, 50);
panel.add(lbl);
lbl.setLocation(50, 50);
frame.setVisible(true);//put it here
}
}