adapter = new SongTableAdapter();

时间:2016-12-18 14:26:37

标签: java oop

public FileSaveSample() {
    initComponents();
    adapter = new SongTableAdapter();
    tblSong.setModel(adapter);
}


int index = tblSong.getSelectedRow();
    Song s = new Song();


    s.setTitle(txtTitlex.getText());
    s.setArtist(txtArtistx.getText());
    s.setGenre((String)cmbGenre1.getSelectedItem());
    adapter.set(index,s);

我该怎么做才能更换数据? adapter.set(index,s);无法正常工作,因为我使用了表适配器,但是在arraylist中它正在工作我该怎么办?

import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
import java.util.List;

public class SongTableAdapter extends AbstractTableModel {

    private String[] columns = {"Title", "Artist", "Genre"};
    private List<Song> songs;

    public SongTableAdapter() {
        songs = new ArrayList<Song>();
    }

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

    @Override
    public int getColumnCount() {
        return columns.length;
    }

    public List<Song> getSongs() {
        return songs;
    }

    public void setSongs(List<Song> songs) {
        this.songs = songs;
        fireTableDataChanged();
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        switch(columnIndex) {
            case 1:
                return songs.get(rowIndex).getArtist();
            case 2:
                return songs.get(rowIndex).getGenre();
            default:                
                return songs.get(rowIndex).getTitle();
        }
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        Song song = songs.get(rowIndex);
        switch(columnIndex) {
            case 0:
                song.setTitle(String.valueOf(aValue));
                break;
            case 1:
                song.setArtist(String.valueOf(aValue));
                break;
            case 2:
                song.setGenre(String.valueOf(aValue));
                break;
        }
    }

    @Override
    public String getColumnName(int i) {
        return columns[i];
    }

    public String[] getColumns() {
        return columns;
    }

    public void add(Song song) {
        songs.add(song);
        fireTableDataChanged();
    }

    public void remove(int i) {
        songs.remove(i);
        fireTableDataChanged();
    }

    public void clear() {
        songs.clear();
        fireTableDataChanged();
    }

    public Song get(int index) {
        return songs.get(index);
    }

    public int size() {
        return songs.size();
    }
}

1 个答案:

答案 0 :(得分:0)

这会解决您的问题吗?

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    Song song = songs.get(rowIndex);
    switch(columnIndex) {
        case 0:
            song.setTitle(String.valueOf(aValue));
            break;
        case 1:
            song.setArtist(String.valueOf(aValue));
            break;
        case 2:
            song.setGenre(String.valueOf(aValue));
            break;
    }
  fireTableDataChanged(); 
}

当然,请调用此方法而不是adapter.set(index,s);