有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java问题AbstractTableModel,表不显示

我正在尝试使用现有的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. # 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);
        }
    
    }