【问题标题】:How do I create a jTable with information from an arrayList in netbeans?如何使用 netbeans 中的 arrayList 中的信息创建 jTable?
【发布时间】:2018-01-26 19:58:14
【问题描述】:

https://gist.github.com/anonymous/535db68625fdb1e46deb

嗨!所以我的程序的目的是跟踪俱乐部名册。目前我正在尝试构建一个 GUI。我想要一个 jTable,其中包含 Club 和 Student 对象中的信息。该表将有 3 列,即学生的实例字段。每行将是一个不同的学生。该信息将来自每个俱乐部的花名册数组列表。下拉菜单将选择不同的俱乐部,替换表中的数据。我已经阅读了一些关于如何创建 TableModel 来执行此操作的内容,但我不知道如何在 netbeans 中创建它。我无法编辑生成的代码,并且“自定义代码”功能似乎不是我想要的,但我可能错了。感谢您的所有帮助。

【问题讨论】:

  • Ken 似乎掌握了表格的概念(尽管他包含了不相关的代码)。我认为他在问“如何将我的表模型传递给 NetBeans 中的表”。例如,在 Eclipse 中,您会在表的属性列表中找到模型属性并设置自定义模型,但我已经很多年没有接触过 NetBeans,所以我自己无法回答这个问题。
  • 您可以使用表单编辑器来完成目前的工作,在某些时候您需要弄脏代码。最简单的解决方案是创建一个TableModel(我建议使用AbstractTableModel,因为它允许您直接处理已有的对象)并通过JTable#setModel 方法将其应用于表
  • @MarsAtomic 仍然只是 Java 代码...JTable#setModel
  • 没错,在这个网站上有很多这样的例子。例如,请查看@MadProgrammer's list of relevant answers,以及my list of answers

标签: java swing netbeans jtable


【解决方案1】:

创建一个能够管理您的Students 的TableModel...

public class StudentTableModel extends AbstractTableModel {

    private List<Student> students;

    public StudentTableModel(List<Student> students) {
        this.students = students;
    }

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

    @Override
    public int getColumnCount() {
        return 3;
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        Class type = Object.class;
        switch (columnIndex) {
            case 0:
            case 1:
            case 2:
                type = String.class;
                break;
        }
        return type;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Student student = students.get(rowIndex);
        Object value = null;
        switch (columnIndex) {
            case 0:
                value = student.getFirstName();
                break;
            case 1:
                value = student.getLastName();
                break;
            case 2:
                value = student.getPosition();
                break;
        }
        return value;
    }

    @Override
    public String getColumnName(int column) {
        String name = "";
        switch (column) {
            case 0:
                name = "First name";
                break;
            case 1:
                name = "Last name";
                break;
            case 2:
                name = "Position";
                break;
        }
        return name;
    }

}

然后使用您的JTable 实例,将模型应用到表...

StudentTableModel studentModel = new StudentTableModel(...);
rosterTable.setModel(studentModel);

【讨论】:

    【解决方案2】:

    getStr_c1() 是类的方法,对象由 myarraylist() 方法返回。

    jTable_a = new javax.swing.JTable();
    javax.swing.table.DefaultTableModel model =new
    avax.swing.table.DefaultTableModel();
    Object[] columnsName = new Object[4];
    columnsName[0] = "colimn1";
    columnsName[1] = "colimn2";
    columnsName[2] = "colimn3";
    columnsName[3] = "colimn14";
    model.setColumnIdentifiers(columnsName);
    Object[]rowData = new Object[4];
    for(int i = 0; i < myarraylist().size(); i++){
    rowData[0] = myarraylist().get(i).getStr_c1();
    rowData[1] = myarraylist().get(i).getStr_c2();
    rowData[2] = myarraylist().get(i).getStr_c3();
    rowData[3] = myarraylist().get(i).getStr_c4();
    model.addRow(rowData);
    }
    jTable_a.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
    jTable_a.setModel(model);
    

    【讨论】:

      猜你喜欢
      • 2015-01-14
      • 2021-11-01
      • 2013-04-04
      • 2023-01-04
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      相关资源
      最近更新 更多