我正在尝试绘制一个具有现有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进行尝试,但不知道我在做什么错。桌子从没露面。
答案 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);
}
}