Java Hinzufügen Klicken Sie auf Listener JButton in-Schleife im Thread

Ich habe eine Schleife, in der mehrere JLabel erstellt werden, mit einem link zu einem Bild.

Für jedes JLabel, es ist ein JButton erstellt.

Verhalten ich bin auf der Suche nach ist, dass für jeden JButton, um hinzufügen eine click-listener, der feuert eine Methode.

Das erste Problem ist, dass es scheint, als ob ich unfähig bin, einen Listener hinzufügen in den thread.

Das zweite Problem ist, dass ich sehe nicht, wie ich angeben kann jeder JButton Feuer der Klick-listener mit einem anderen Wert.

Ich bin auf der Suche nach etwas ähnlich der folgenden (offenbar onClick-Methode nicht vorhanden):

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();
    }
}
  • Das verwirrt mich: "The behaviour I'm looking for is that for each JButton, to add a click listener, which fires a method." - - Können Sie näher erläutern, was das bedeutet und was Sie zu tun versuchen.
  • In einer Schleife, erstelle ich mehrere JButtons, ich möchte jede JButton, ein auf-Klick-listener, die Ausführung einer Methode.
  • Auch, versuchen Sie zum erstellen und hinzufügen von Swing-Komponenten aus-von der EDT, die Swing event dispatch thread? Wenn dem so ist, nicht.
  • JButton verwenden ActionListeners nicht "ein-Klick-Listener". Wenn Sie hinzufügen einen ActionListener an den button, oder setzen Sie seine Action -, dann sollte diese kümmern sich um Dinge für Sie.
  • Ich habe gehört dies vor, beziehen Sie sich auf InvokeLater? Sollte ich ersetzen Thread mit InvokeLater? Aber die Einstellung die JButton ' s Aktion ist einfach nur ein string, wie kann ich einen Wert übergeben mit dem ActionListener?
  • Wenn Sie brauchen, um verwenden Sie einen hintergrund-thread, dann erwägen Sie die Verwendung einer SwingWorker. Seine publish/process-Methode-pair-Mädchen ermöglichen den SwingWorker zu veröffentlichen Zwischenergebnisse, um die GUI auf Swing-event-thread. Überprüfen Sie die concurrency in Swing tutorial weitere auf dieser.
  • Vielen Dank, ich werde über Sie einen Wert mit dem ActionListener, wie ist das möglich? Ist es möglich zu definieren, das ActionEvent auf das Fliegen innerhalb der Schleife?
  • Müssen Sie eine Klasse erstellen, die entweder implementiert ActionListener oder erweitert AbstractAction, geben Sie der Klasse einen Konstruktor den String von Interesse (oder jede andere information, die übergeben werden muss), und dann hinzufügen, dass der JButton als seine ActionListener oder so seine Wirkung.
  • lassen Sie uns weiterhin diese Diskussion im chat
  • Kann nicht chatten, da ich auf der Arbeit bin und der chat wird von einer firewall blockiert.

InformationsquelleAutor Cristian | 2012-10-01
Schreibe einen Kommentar