Qual é a maneira mais fácil para exibir o conteúdo de um ArrayList de objetos em uma JTable?

StackOverflow https://stackoverflow.com/questions/623690

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu tenho um ArrayList de rastrear objetos. Cada objeto faixa tem os seguintes campos (todas as strings):

url, título, criador, álbum, gênero, compositor

I deseja exibir estas faixas em uma JTable, com cada linha sendo uma instância de um objecto de Pista, e cada coluna contendo uma das propriedades de um objecto de Pista.

Como posso exibir esses dados usando um JTable? Eu usei um AbstractTableModel que implementa o método getValueAt () corretamente. Ainda assim, eu não vejo nada na tela.

Ou é mais fácil apenas para matrizes de uso?

Foi útil?

Solução

Para adicionar conteúdo para exibição em um JTable , um usa o TableModel para adicionar itens à exibição.

Um de uma maneira de adicionar uma linha de dados para o DefaultTableModel é usando o addRow método que terá uma matriz de Objects que representa os objectos da fila. Como não existem métodos para adicionar diretamente o conteúdo de um ArrayList, pode-se criar uma matriz de Objects acessando o conteúdo do ArrayList.

O exemplo a seguir usa uma classe KeyValuePair que é um suporte para dados (semelhante a sua classe Track), que será usado para preencher um DefaultTableModel para exibir uma tabela como um JTable:

class KeyValuePair
{
    public String key;
    public String value;

    public KeyValuePair(String k, String v)
    {
        key = k;
        value = v;
    }
}

// ArrayList containing the data to display in the table.
ArrayList<KeyValuePair> list = new ArrayList<KeyValuePair>();
list.add(new KeyValuePair("Foo1", "Bar1"));
list.add(new KeyValuePair("Foo2", "Bar2"));
list.add(new KeyValuePair("Foo3", "Bar3"));

// Instantiate JTable and DefaultTableModel, and set it as the
// TableModel for the JTable.
JTable table = new JTable();
DefaultTableModel model = new DefaultTableModel();
table.setModel(model);
model.setColumnIdentifiers(new String[] {"Key", "Value"});

// Populate the JTable (TableModel) with data from ArrayList
for (KeyValuePair p : list)
{
    model.addRow(new String[] {p.key, p.value});
}

Outras dicas

então, o problema que tenho é que eu não posso ver o problema em tudo. aqui está o código que usei para fazer a interface:

public Interface(){

    setSize(1024, 768);
    setBackground(new Color(0,0,0));
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    add(new MenuBar());//simple JMenuBar implementation

    table= new JTable();
    table.setPreferredScrollableViewportSize(new Dimension(500, 500));

    JScrollPane jsp = new JScrollPane(table);
    add(jsp);

    pack();
    setVisible(true);
}

após esse código é executado, eu tenho o código em outra classe que faz isso muitas vezes:

((DefaultTableModel)mainInterface.table.getModel()).addRow(
new String[] {t.location,t.title,t.creator,t.album,t.genre,t.composer});

t é um objeto faixa pelo caminho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top