我正在创建一个程序,用户在其中单击提供的 4 张图像中的 1 张作为他们对问题的输入。回答完问题后,窗口是转到下一个问题。我该怎么做?我应该为图像使用案例还是更有效的方式?
例如:问题是哪个形象是朵拉?将有朵拉、布拉德皮特、赛琳娜戈麦斯和达菲鸭的形象。如果用户单击图像(没有单选按钮),程序应保存输入并继续下一个问题。
我的问题更具体地是关于如何使用户单击的图像成为可以保存的输入。
我的建议是使用 ImageIcon 构造函数创建 JLabels,让您的类实现 MouseListener
,然后为每个 JLabel 使用 addMouseListener
方法。是要为每个类创建匿名MouseListener
还是仅使用类实例取决于您。下面是一个有助于入门的示例:
import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
public class Test implements MouseListener {
private JLabel imageLabel1, imageLabel2;
public Test() {
JFrame frame = new JFrame("Test");
frame.setLayout(new BorderLayout());
JLabel introLabel = new JLabel("Click an image");
introLabel.setHorizontalAlignment(SwingConstants.CENTER);
frame.add(introLabel,BorderLayout.NORTH);
imageLabel1 = new JLabel(new ImageIcon("image1.png"));
frame.add(imageLabel1,BorderLayout.WEST);
imageLabel1.addMouseListener(this);
imageLabel2 = new JLabel(new ImageIcon("image2.png"));
frame.add(imageLabel2,BorderLayout.EAST);
imageLabel2.addMouseListener(this);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
@Override
public void mouseClicked(MouseEvent ev) {
if (ev.getSource() == imageLabel1)
System.out.println("Image 1 clicked");
if (ev.getSource() == imageLabel2)
System.out.println("Image 2 clicked");
}
@Override public void mouseEntered(MouseEvent ev) {}
@Override public void mouseExited(MouseEvent ev) {}
@Override public void mousePressed(MouseEvent ev) {}
@Override public void mouseReleased(MouseEvent ev) {}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Test();
}
});
}
}