gpt4 book ai didi

java - 尝试使用鼠标监听器在数组中显示图像

转载 作者:行者123 更新时间:2023-12-01 10:54:41 24 4
gpt4 key购买 nike

我尝试学习 GUI,并创建了一个包含 3 张图片的 ImageIcon 数组。我想让用户可以继续点击并显示新图片。我正在尝试使用actionMouseListener,但它只显示一张不会改变的图片。我对此很陌生,所以任何有关最有效方法的建议都会很棒,因为一旦它起作用,我希望添加更多图片。我还在控制台中得到了一个我以前从未见过的非常奇怪的输出,我不知道它意味着什么:

2015-11-12 17:49:33.656 java[22322:1488426] CoreText: *** Unmapped   
"e\uFE0F" <CTFont: 0x7fa89f0842a0>{name = .SFNSText-Regular, size =
13.000000, matrix = 0x0, descriptor = <CTFontDescriptor:
0x7fa89f084250>{attributes = <CFBasicHash 0x7fa89f0843f0
[0x7fff77e2d390]>{type = mutable dict, count = 1,
entries =>
2 : <CFString 0x7fff7a657710 [0x7fff77e2d390]>{contents =
"NSFontNameAttribute"} = <CFString 0x7fff7a64b5d0 [0x7fff77e2d390]>
{contents = ".SFNSText-Regular"}
}
>}}

我的代码看起来像

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
@SuppressWarnings("serial")
public class AubsGUI extends JFrame
{
private JLabel label, label1; // labels that is on our window
private JTextField textfield; // the window will have writing
ImageIcon pic[] = new ImageIcon[3];
JPanel panel;
public AubsGUI() // constructor
{
setLayout (new FlowLayout());
label = new JLabel (" title "); // creating a label
add(label); // adding label to the screen
textfield = new JTextField(" Heres a Picture ");//creating a text field
add(textfield); // adding text field to the screen
for(int i = 0; i < 3; i++)
{
pic[i] = new ImageIcon(getClass().getResource(i +".JPG"));
}
label1 = new JLabel();
label1.setIcon(picture());
add(label1);
event e = new event();
label1.addMouseListener(e);
}
public ImageIcon picture()
{
int i = 0;
i++;
return pic[i];
}
public class event implements MouseListener
{
public void mouseClicked(MouseEvent e)
{
label1.setIcon(picture());
}
public void mousePressed(MouseEvent e)
{


}
public void mouseReleased(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
}
public static void main (String args [])
{
AubsGUI aubs = new AubsGUI(); // creates an object aubs from class AubsGUi
aubs.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // allows window to close and program to end
aubs.pack();
aubs.setVisible(true); // allows you to see window while program runs
aubs.setTitle(" title️ ");
}
}

最佳答案

我不知道你的错误,但是你的图像不交换的问题是因为 i 是一个局部变量,它总是从 0 开始,所以它可以永远不会超过 1

public ImageIcon picture()
{
int i = 0;
i++;
return pic[i];
}

相反,i 应该是一个实例变量,因此每次调用 picture 时,都会保留该值

private int i = 0;

public ImageIcon picture() {
if (i >= pic.length) {
i = 0;
}
ImageIcon icon = pic[i];
i++;
return icon;
}

我稍微修改了该方法,以便在第一次调用它时,返回第一个图像,而不是第二个

您还应该仅在事件调度线程的上下文中创建/修改您的 UI,请参阅 Initial Threads了解更多详情。

您可能想通读Code Conventions for the Java TM Programming Language ,这将使人们更容易阅读您的代码,也让您更轻松地阅读其他人

我“认为”该错误与 aubs.setTitle("title️ "); 有关,它“似乎”末尾有一个 Unicode 字符 \uFE0F文本的,系统或字体无法找到其映射,但我真的只是猜测

关于java - 尝试使用鼠标监听器在数组中显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33683708/

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