问题与AbstractTableModel,表不显示

时间:2019-06-14 10:39:39

标签: java swing jtable

我正在尝试绘制一个具有现有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 个答案:

答案 0 :(得分:1)

如评论中所述,使用setLayout(null)会给您带来很多问题。特别是用于显示JTable。解决方案将是use a 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);
    }

}