4

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

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

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

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

还是只使用数组更容易?

4

2 回答 2

10

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

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

以下示例使用一个KeyValuePair作为数据持有者的类(类似于您的Track类),它将用于填充 aDefaultTableModel以将表格显示为 a 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});
}
于 2009-03-08T15:13:37.230 回答
0

然后,我的问题是我根本看不到问题。这是我用来制作界面的代码:

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 对象。

于 2009-03-08T16:15:00.110 回答