Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更换新的图像图标?_Java_Image_Swing_Imageicon - Fatal编程技术网

Java 如何更换新的图像图标?

Java 如何更换新的图像图标?,java,image,swing,imageicon,Java,Image,Swing,Imageicon,当我按下按钮时,如何将图片从image1更改为新图像?1)尝试使用setIcon方法。如果不起作用,2)更换 将整个JLabel对象与新对象(具有新图标)一起标记 如果使用第二种方法,您需要 将MyImage转换为类变量。1)尝试使用setIcon方法。如果不起作用,2)更换 将整个JLabel对象与新对象(具有新图标)一起标记 如果使用第二种方法,您需要 将MyImage转换为类变量。稍微偏离主题 您不应该从文件系统加载图像。当您将路径字符串传递给ImageIcon时,您最终会告诉它在文件

当我按下按钮时,如何将图片从image1更改为新图像?

1)尝试使用
setIcon
方法。如果不起作用,2)更换
将整个
JLabel
对象与新对象(具有新图标)一起标记

如果使用第二种方法,您需要
MyImage
转换为类变量。

1)尝试使用
setIcon
方法。如果不起作用,2)更换
将整个
JLabel
对象与新对象(具有新图标)一起标记

如果使用第二种方法,您需要

MyImage
转换为类变量。

稍微偏离主题

您不应该从文件系统加载图像。当您将路径字符串传递给
ImageIcon
时,您最终会告诉它在文件系统中查找图像。虽然这可能在IDE的开发期间起作用,但在部署时,您会发现它不起作用

相反,您应该通过URL将图像作为文件加载。可以使用以下方法获取URL。资源将从类路径中查找,这是应该的。这里有一个例子

String mycon="image1.png";

public LottoGUI(String one, String two,String three) {
    Container C= getContentPane();
    C.setLayout(new FlowLayout());
    JLabel MyImage = new JLabel(new ImageIcon(mycon));
    JButton labb =    new JButton("OK!");
    labb.addActionListener(this);
    C.add(MyImage);
    C.add(labb) 
}

public void actionPerformed(ActionEvent e) {
    if(e.getSource()==labb){}
}
其中
image.png
位于
src
中的一个资源包中,它将在构建时复制到类路径中

ImageIcon icon = new ImageIcon(MyClass.class.getResource("/resources/image.png"));

回到话题上

至于你的主要问题,正如@peter.petrov所指出的,你应该使用
.setIcon(icon)
并使
MyImage
成为具有全局作用域的类成员,以便可以在其他代码块中访问它。现在它只在构造函数中的本地范围内

ProjectRoot
          src
              resources
                      image.png


还要注意Java命名约定。变量应该以小写字母开头,即
MyImage
应该是
MyImage

稍微偏离主题

您不应该从文件系统加载图像。当您将路径字符串传递给
ImageIcon
时,您最终会告诉它在文件系统中查找图像。虽然这可能在IDE的开发期间起作用,但在部署时,您会发现它不起作用

相反,您应该通过URL将图像作为文件加载。可以使用以下方法获取URL。资源将从类路径中查找,这是应该的。这里有一个例子

String mycon="image1.png";

public LottoGUI(String one, String two,String three) {
    Container C= getContentPane();
    C.setLayout(new FlowLayout());
    JLabel MyImage = new JLabel(new ImageIcon(mycon));
    JButton labb =    new JButton("OK!");
    labb.addActionListener(this);
    C.add(MyImage);
    C.add(labb) 
}

public void actionPerformed(ActionEvent e) {
    if(e.getSource()==labb){}
}
其中
image.png
位于
src
中的一个资源包中,它将在构建时复制到类路径中

ImageIcon icon = new ImageIcon(MyClass.class.getResource("/resources/image.png"));

回到话题上

至于你的主要问题,正如@peter.petrov所指出的,你应该使用
.setIcon(icon)
并使
MyImage
成为具有全局作用域的类成员,以便可以在其他代码块中访问它。现在它只在构造函数中的本地范围内

ProjectRoot
          src
              resources
                      image.png


还要注意Java命名约定。变量应以小写字母开头,即
MyImage
应为
MyImage

在JButton click事件中使用此行

String mycon="image1.png";
JLabel MyImage;

public LottoGUI(String one, String two,String three) {
    Container C= getContentPane();
    C.setLayout(new FlowLayout());
    MyImage = new JLabel(new ImageIcon(mycon));
    JButton labb =    new JButton("OK!");
    labb.addActionListener(this);
    C.add(MyImage);
    C.add(labb) 
}

public void actionPerformed(ActionEvent e) {
    if(e.getSource()==labb){
        MyImage.setIcon(newIcon);
    }
}
用类路径替换
“/images/one.png”


Thnaks..

在JButton click事件上使用此行

String mycon="image1.png";
JLabel MyImage;

public LottoGUI(String one, String two,String three) {
    Container C= getContentPane();
    C.setLayout(new FlowLayout());
    MyImage = new JLabel(new ImageIcon(mycon));
    JButton labb =    new JButton("OK!");
    labb.addActionListener(this);
    C.add(MyImage);
    C.add(labb) 
}

public void actionPerformed(ActionEvent e) {
    if(e.getSource()==labb){
        MyImage.setIcon(newIcon);
    }
}
用类路径替换
“/images/one.png”

Thnaks