Como criar um botão para atualizar dados de uma array

Bom, estou com um problema, que é criar um botão para atualizar dados de um array,segue o código.
O botão pesquisar funciona mas o atualizar não,é um pequeno trabalho da faculdade.

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import static java.lang.String.valueOf;
import java.util.ArrayList;
import static java.util.Collections.list;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Cidade extends JFrame {

static ArrayList<String> cidades = new ArrayList<>();
Listener listener = new Listener();
JLabel labelid = new JLabel("id");
JTextField textid = new JTextField();
JTextField textnome = new JTextField();
JLabel labelnome = new JLabel("Nome da Cidade");
JButton botaopesquisar = new JButton("Pesquisar");
JButton botaoatualizar = new JButton("Atualizar");

public Cidade() {
    GridLayout layout = new GridLayout(3, 2);
    this.setLayout(layout);
    this.add(labelid);
    this.add(textid);
    this.add(labelnome);
    this.add(textnome);
    this.add(botaopesquisar);
    this.add(botaoatualizar);
    botaopesquisar.addActionListener(listener);
    botaoatualizar.addActionListener(listener);
    this.pack();
    this.setVisible(true);
}

public static void main(String[] args) {
    new Cidade();
    cidades.add("Lisboa");
    cidades.add("Santarem");
    cidades.add("Tomar");
    cidades.add("Coimbra");
    cidades.add("Porto");
    cidades.add("Funchal");
}

private class Listener implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        int id = Integer.parseInt(textid.getText())- 1;
        if (e.getSource() == botaopesquisar) {
            for (int i = 0; i < cidades.size();i++) {
                if(i == id){
                textnome.setText(cidades.get(i));
                }
            }
        }
        
            
        if (e.getSource() == botaoatualizar) {
            cidades.set(id, valueOf(textnome));
        
        }
    }
}

}

Troque

cidades.set(id, valueOf(textnome));

Por

cidades.set(id, textnome.getText());

De qualquer forma, dei uma refatorada na sua classe pra ficar mais limpa, também mudei o nome para TelaCidades, já que esta classe é uma tela para manipular cidades.

Veja:

import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class TelaCidades extends JFrame {

    public static void main(String[] args) {
        TelaCidades tela = new TelaCidades();
        tela.setDefaultCloseOperation(EXIT_ON_CLOSE);
        tela.setVisible(true);
    }

    private JLabel labelid;
    private JTextField textid;
    private JTextField textnome;
    private JLabel labelnome;
    private JButton botaopesquisar;
    private JButton botaoatualizar;

    private List<String> cidades;

    public TelaCidades() {
        montarLayout();
        carregarCidades();
    }

    private void montarLayout() {
        labelid = new JLabel("id");
        textid = new JTextField();
        textnome = new JTextField();
        labelnome = new JLabel("Nome da Cidade");

        botaopesquisar = new JButton("Pesquisar");
        botaopesquisar.addActionListener(event -> pesquisar());

        botaoatualizar = new JButton("Atualizar");
        botaoatualizar.addActionListener(event -> atualizar());

        GridLayout layout = new GridLayout(3, 2);
        this.setLayout(layout);
        this.add(labelid);
        this.add(textid);
        this.add(labelnome);
        this.add(textnome);
        this.add(botaopesquisar);
        this.add(botaoatualizar);

        this.pack();
    }

    private void carregarCidades() {
        cidades = new ArrayList<>();
        cidades.add("Lisboa");
        cidades.add("Santarem");
        cidades.add("Tomar");
        cidades.add("Coimbra");
        cidades.add("Porto");
        cidades.add("Funchal");
    }

    private void pesquisar() {
        int id = Integer.parseInt(textid.getText()) - 1;
        for (int i = 0; i < cidades.size(); i++) {
            if (i == id) {
                textnome.setText(cidades.get(i));
            }
        }
    }

    private void atualizar() {
        int id = Integer.parseInt(textid.getText()) - 1;
        cidades.set(id, textnome.getText());
    }
}