【问题标题】:What is the easiest way to display the contents of an ArrayList of Objects in a JTable?在 JTable 中显示对象的 ArrayList 内容的最简单方法是什么?
【发布时间】:2010-10-12 01:00:27
【问题描述】:

我有一个 Track 对象的 ArrayList。 每个 Track 对象都有以下字段(所有字符串):

网址、标题、创作者、专辑、流派、作曲家

我想在 JTable 中显示这些轨道,每一行都是一个 Track 对象的实例,每一列都包含一个 Track 对象的属性。

如何使用 JTable 显示这些数据?我使用了一个正确实现 getValueAt() 方法的 AbstractTableModel。不过,我在屏幕上看不到任何东西。

还是只使用数组更容易?

【问题讨论】:

    标签: jtable


    【解决方案1】:

    为了在JTable 上添加要显示的内容,可以使用TableModel 添加要显示的项目。

    将一行数据添加到DefaultTableModel 的一种方法是使用addRow 方法,该方法将采用代表行中对象的Objects 数组。由于没有直接从ArrayList 添加内容的方法,因此可以通过访问ArrayList 的内容来创建Objects 的数组。

    以下示例使用 KeyValuePair 类作为数据的持有者(类似于您的 Track 类),它将用于填充 DefaultTableModel 以将表格显示为 JTable

    class KeyValuePair
    {
        public String key;
        public String value;
    
        public KeyValuePair(String k, String v)
        {
            key = k;
            value = v;
        }
    }
    
    // ArrayList containing the data to display in the table.
    ArrayList<KeyValuePair> list = new ArrayList<KeyValuePair>();
    list.add(new KeyValuePair("Foo1", "Bar1"));
    list.add(new KeyValuePair("Foo2", "Bar2"));
    list.add(new KeyValuePair("Foo3", "Bar3"));
    
    // Instantiate JTable and DefaultTableModel, and set it as the
    // TableModel for the JTable.
    JTable table = new JTable();
    DefaultTableModel model = new DefaultTableModel();
    table.setModel(model);
    model.setColumnIdentifiers(new String[] {"Key", "Value"});
    
    // Populate the JTable (TableModel) with data from ArrayList
    for (KeyValuePair p : list)
    {
        model.addRow(new String[] {p.key, p.value});
    }
    

    【讨论】:

      【解决方案2】:

      那么,我的问题是我根本看不到问题所在。 这是我用来制作界面的代码:

      public Interface(){
      
          setSize(1024, 768);
          setBackground(new Color(0,0,0));
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
          add(new MenuBar());//simple JMenuBar implementation
      
          table= new JTable();
          table.setPreferredScrollableViewportSize(new Dimension(500, 500));
      
          JScrollPane jsp = new JScrollPane(table);
          add(jsp);
      
          pack();
          setVisible(true);
      }
      

      执行此代码后,我在另一个类中有多次执行此操作的代码:

      ((DefaultTableModel)mainInterface.table.getModel()).addRow(
      new String[] {t.location,t.title,t.creator,t.album,t.genre,t.composer});
      

      顺便说一句,t 是一个 Track 对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-08
        • 2018-05-28
        • 2012-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-04
        • 1970-01-01
        相关资源
        最近更新 更多