Adicionando uma linha de uma AbstractTableModel em outra AbstractTableModel através de um botão

Então pessoal, quero adicionar uma linha da tabela da esqueda na tabela da direita, quando a pessoa apertar o botão, e ao mesmo tempo que isso acontecer essa linha vai ser retirada da tabela da esqueda.

Eu tenho a coluna idLayouts e a coluna nomes.

Eu quero passar essas colunas para a outra tabela ao clicar no botão de enviar para a coluna da direita.

Ja tentei de tudo, mas nãoo consigo de jeito nenhum

Segue os códigos abaixo:

Minha tela

A classe AbstractTableModel :

public class LayoutTableModel extends AbstractTableModel {

    private List<Layoutsos> listaLayoutos;

    public LayoutTableModel(List<Layoutsos> listaLayoutos) {
        this.listaLayoutos = listaLayoutos;
    }
    
   public void addRow(Layoutsos layout){
        this.listaLayoutos.add(layout);
        this.fireTableDataChanged();
    }
   
   public void removeRow(int linha){
    this.listaLayoutos.remove(linha);
    this.fireTableRowsDeleted(linha, linha);
}

    @Override
    public int getRowCount() {
        return this.listaLayoutos.size();
    }

    @Override
    public int getColumnCount() {
        return 2;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Layoutsos n = listaLayoutos.get(rowIndex);

        switch (columnIndex) {
            case 0:
                return n.getIdlayoutsos();
            case 1:
                return n.getNome();
                
            
        }
        return null;
    }

    @Override
    public String getColumnName(int column) {
        switch (column) {
            case 0:
                return "ID";
            case 1:
                return "Nome";
            
        }
        return "";
    }
}[/code]


A classe Layoutsos

[code=java]@Entity
@Table(name = "layoutsos")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Layoutsos.findAll", query = "SELECT l FROM Layoutsos l"),
    @NamedQuery(name = "Layoutsos.findByIdlayoutsos", query = "SELECT l FROM Layoutsos l WHERE l.idlayoutsos = :idlayoutsos"),
    @NamedQuery(name = "Layoutsos.findByNome", query = "SELECT l FROM Layoutsos l WHERE l.nome = :nome"),
    @NamedQuery(name = "Layoutsos.findByMedidas", query = "SELECT l FROM Layoutsos l WHERE l.medidas = :medidas")})
public class Layoutsos implements Serializable {
    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idlayoutsos")
    private Integer idlayoutsos;
    @Column(name = "nome")
    private String nome;
    @Column(name = "medidas")
    private String medidas;
    @JoinTable(name = "ordemservico_has_layoutsos", joinColumns = {
        @JoinColumn(name = "layoutsos_idlayoutsos", referencedColumnName = "idlayoutsos")}, inverseJoinColumns = {
        @JoinColumn(name = "ordemservico_idordemservico", referencedColumnName = "idordemservico")})
    @ManyToMany
    private List<Ordemservico> ordemservicoList;

    public Layoutsos() {
    }

    public Layoutsos(Integer idlayoutsos) {
        this.idlayoutsos = idlayoutsos;
    }

    public Integer getIdlayoutsos() {
        return idlayoutsos;
    }

    public void setIdlayoutsos(Integer idlayoutsos) {
        Integer oldIdlayoutsos = this.idlayoutsos;
        this.idlayoutsos = idlayoutsos;
        changeSupport.firePropertyChange("idlayoutsos", oldIdlayoutsos, idlayoutsos);
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        String oldNome = this.nome;
        this.nome = nome;
        changeSupport.firePropertyChange("nome", oldNome, nome);
    }

    public String getMedidas() {
        return medidas;
    }

    public void setMedidas(String medidas) {
        String oldMedidas = this.medidas;
        this.medidas = medidas;
        changeSupport.firePropertyChange("medidas", oldMedidas, medidas);
    }

    @XmlTransient
    public List<Ordemservico> getOrdemservicoList() {
        return ordemservicoList;
    }

    public void setOrdemservicoList(List<Ordemservico> ordemservicoList) {
        this.ordemservicoList = ordemservicoList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idlayoutsos != null ? idlayoutsos.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Layoutsos)) {
            return false;
        }
        Layoutsos other = (Layoutsos) object;
        if ((this.idlayoutsos == null && other.idlayoutsos != null) || (this.idlayoutsos != null && !this.idlayoutsos.equals(other.idlayoutsos))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return   nome   ;
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.removePropertyChangeListener(listener);
    }
    
}

Aqui é como eu pegos os dados do banco

[code=java]
List dp = new LayoutsosJpaController().findLayoutsosEntities(); // comming from DB

    tableModel = new LayoutTableModel(dp);
    jTableTodosLayouts.setModel(tableModel); //LeftTable[/code]

Não li o código, mas não seria algo como:

tableModel2.addRow(tableModel1.getRow(jTable.getSelectedRow());

?