【发布时间】:2012-10-01 21:44:28
【问题描述】:
我有一个循环,其中创建了几个 JLabel,其中包含指向图像的链接。
对于每个 JLabel,都会创建一个 JButton。
我正在寻找的行为是为每个 JButton 添加一个单击侦听器,该侦听器触发一个方法。
第一个问题是我似乎无法在线程中添加监听器。
第二个问题是我看不到如何指定每个 JButton 来触发具有不同值的点击侦听器。
我正在寻找类似于以下的东西(显然 onClick 方法不存在):
Thread thread = new Thread(new Runnable()
{
public void run()
{
JPanel mainPanel = new JPanel();
for (int counter = 0; counter < imageSources.size(); counter++)
{
JLabel imageSource = imageSources.get(counter);
// JButton saveToDisk = new JButton("Save Image");
// saveToDisk.onClick(saveFavourite(imageSources.get(counter)));
mainPanel.add(imageSource);
// mainPanel.add(saveToDisk);
}
.
.
.
public void saveFavourite(String imageUrl)
{
BufferedImage image = null;
try
{
URL url = new URL(imageUrl);
image = ImageIO.read(url);
ImageIO.write(image, "jpg", new File("/Users/USERNAME/Desktop/" + webPage.getMemeId(imageUrl) + ".jpg"));
}
catch (IOException e)
{
e.printStackTrace();
}
}
【问题讨论】:
-
这让我很困惑:
"The behaviour I'm looking for is that for each JButton, to add a click listener, which fires a method."-- 你能更详细地解释一下这意味着什么以及你想要做什么。 -
在一个循环中,我正在创建几个 JButton,我希望每个 JButton 都有一个点击监听器,它执行一个方法。
-
另外,您是否尝试从 EDT(Swing 事件调度线程)创建和添加 Swing 组件?如果是这样,请不要。
-
JButton 使用 ActionListeners 而不是“点击监听器”。如果您将 ActionListener 添加到按钮,或设置其 Action,那么这应该会为您处理好事情。
-
您需要创建一个实现 ActionListener 或扩展 AbstractAction 的类,为该类提供一个构造函数,该构造函数接受您感兴趣的字符串(或任何其他需要传入的信息),然后添加将 JButton 作为其 ActionListener 或作为其 Action。
标签: java swing jpanel jlabel bufferedimage