¿Cuál es la forma más fácil de mostrar el contenido de una lista de objetos de Array en una tabla JT?

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

  •  05-07-2019
  •  | 
  •  

Pregunta

Tengo un ArrayList de objetos de seguimiento. Cada objeto Track tiene los siguientes campos (todas las cadenas):

url, título, creador, álbum, género, compositor

Quiero mostrar estas pistas en una tabla J, cada fila es una instancia de un objeto de pista y cada columna contiene una de las propiedades de un objeto de pista.

¿Cómo puedo mostrar estos datos utilizando una JTable? He usado un AbstractTableModel que implementa el método getValueAt () correctamente. Aún así, no veo nada en la pantalla.

¿O es más fácil usar arreglos?

¿Fue útil?

Solución

Para agregar contenido para mostrar en un < código> JTable , uno usa el TableModel para agregar elementos a mostrar.

Una de las maneras de agregar una fila de datos al DefaultTableModel es mediante el uso de addRow que tomará una matriz de Object s que representa los objetos en la fila. Dado que no hay métodos para agregar contenido directamente desde una ArrayList , se puede crear una matriz de Object s accediendo a los contenidos de la ArrayList .

El siguiente ejemplo utiliza una clase KeyValuePair que es titular de los datos (similar a su clase Track ), que se utilizará para completar un DefaultTableModel para mostrar una tabla como un 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});
}

Otros consejos

entonces, el problema que tengo es que no puedo ver el problema en absoluto. Aquí está el código que he usado para hacer la interfaz:

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);
}

después de ejecutar este código, tengo un código en otra clase que hace esto muchas veces:

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

t es un objeto Track por cierto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top