Проблемы с AbstractTableModel, таблицы не отображаются - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь нарисовать таблицу с существующим ArrayList.Кто-то из этого форума сказал мне использовать AbstractModelTable.

public class prueba2 extends JFrame{

    private ArrayList<alumnos> nLista = new ArrayList<alumnos>();
    private String[] columnas = {"Nombre","Apellidos","Ciudad"};


     public prueba2(){

       nLista.add(new alumnos("Alberto","Espina","Malaga"));
       nLista.add(new alumnos("Luisa","Sanchez","Madrid"));
       nLista.add(new alumnos("Maria","Queixo","Tarragona"));
       nLista.add(new alumnos("Alvaro","Gomez","Alicante"));
       nLista.add(new alumnos("Pablo","Robles","El ejido"));

       TablaAbs abs = new TablaAbs(nLista, columnas);
       JTable tabla = new JTable(abs);
       add(tabla);
       setLayout(null);
       setVisible(true);

           for(alumnos a: nLista){
               System.out.println(a.Frase());
           }
       }

    }

    class alumnos{
    private String nombre;
    private String apellidos;
    private String ciudad;

    public alumnos(String nombre,String apellidos,String ciudad){
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.ciudad = ciudad;
    }
    public String Frase(){
        return "Nombre " +nombre+ "apellidos " +apellidos+ " Ciudad " +ciudad;
    }
    }

    class TablaAbs extends AbstractTableModel{

    private ArrayList aL;
    private String[] columnas;

    public TablaAbs(ArrayList nLista, String[] columnas){
        aL = nLista;
        this.columnas = columnas;
    }

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

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

    @Override
    public String getColumnName(int column) {
        return columnas[column];
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return aL.get(rowIndex);
    }

    }

Я пробовал с обычным массивом, ArrayList (в данном случае) и даже с DefaultTableModel, но не знаю, что я делаю неправильно.Таблицы никогда не появлялись.

1 Ответ

1 голос
/ 14 июня 2019

Как уже упоминалось в комментариях, использование setLayout(null) доставит вам много проблем. Специально для показа JTable. Решение будет использовать LayoutManager. Обратите внимание на изменения, которые я внес в ваш код, и он работает. Также обратите внимание, что я изменил название класса с prueba2 на Prueba2. Настоятельно рекомендуется следовать стандартным соглашениям об именах - все имена классов должны начинаться с заглавной буквы.

public class Prueba2 extends JFrame {

    private ArrayList<alumnos> nLista = new ArrayList<alumnos>();
    private String[] columnas = { "Nombre", "Apellidos", "Ciudad" };

    public Prueba2() {

        nLista.add(new Alumnos("Alberto", "Espina", "Malaga"));
        nLista.add(new Alumnos("Luisa", "Sanchez", "Madrid"));
        nLista.add(new Alumnos("Maria", "Queixo", "Tarragona"));
        nLista.add(new Alumnos("Alvaro", "Gomez", "Alicante"));
        nLista.add(new Alumnos("Pablo", "Robles", "El ejido"));

        TablaAbs abs = new TablaAbs(nLista, columnas);
        JTable tabla = new JTable(abs);

        getContentPane().setLayout(new BorderLayout()); // Use a layout manager
        getContentPane().add(tabla);
        setVisible(true);

    }

    public static void main(String[] args) {
        // All swing applications must run on their own thread.
        SwingUtilities.invokeLater(() -> new Prueba2());
    }

}

class Alumnos {
    private String nombre;
    private String apellidos;
    private String ciudad;

    public Alumnos(String nombre, String apellidos, String ciudad) {
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.ciudad = ciudad;
    }

    public String Frase() {
        return "Nombre " + nombre + "apellidos " + apellidos + " Ciudad " + ciudad;
    }
}

class TablaAbs extends AbstractTableModel {

    private ArrayList aL;
    private String[] columnas;

    public TablaAbs(ArrayList nLista, String[] columnas) {
        aL = nLista;
        this.columnas = columnas;
    }

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

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

    @Override
    public String getColumnName(int column) {
        return columnas[column];
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return aL.get(rowIndex);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...