这是我的代码
import javax.swing.*;
public class Option extends JFrame{
ImageIcon img = new ImageIcon("image.png");
ImageIcon img2 = new ImageIcon("image2.png");
JButton testBut = new JButton(img);
JButton testBut2 = new JButton(img2);
JPanel pnl = new JPanel();
public Option(){
super("Swing Window");
setSize( 500,200 );
setDefaultCloseOperation(EXIT_ON_CLOSE);
pnl.add(testBut);
pnl.add(testBut2);
add(pnl);
setVisible(true);
}
public static void main(String[] args){
Option gui = new Option();
}
}
我将这两个图像放在与类文件相同的目录中,并且按钮显示为空白。我是Java的新手,所以我想不出有什么理由这是错误的。
修改
图像与Option类
位于同一目录中答案 0 :(得分:2)
“图像与Option类”
位于同一目录中
ImageIcon(String)
正在尝试在工作目录的上下文中找到命名的图像(从执行程序的位置)并且它将失败,因为那里的图像实际上不存在。
图像包含在应用程序上下文中(当您的应用程序被监视时,图像将在Jar中被记录)。
相反,你应该尝试使用......
img = new ImageIcon(getClass().getResource("image.png"));
来自类的构造函数。这将尝试查找相对于在应用程序的类路径上下文中调用getResource
的类的包的图像
我还鼓励使用ImageIO.read
ImageIcon
有两个原因,第二,保证在调用方法时加载图像(而不是在某些后台线程中加载)二,如果由于某种原因无法加载图像,它将抛出IOException
,这样会更有帮助
有关详细信息,请查看Reading/Loading an Image
答案 1 :(得分:1)
您还可以添加类似的代码:
setIconImage(new ImageIcon(new File("icona.png").toString()).getImage());