1

在您回答之前:是的,我已经阅读了 Sun 的 jtable 教程。不,它没有帮助我。是的,我是个傻子。请不要参考该文件来回答。我特别感兴趣的是如何通过 Netbeans IDE 向我的 Jtable 动态添加行和列。我已经有一个对象,其中包含我的数据的哈希图。我不知道我应该将该对象传递给何处或哪个对象。谢谢你的时间!

我有一个向量,其中包含一系列(长度为 l)的对象(每个对象对应一行)。如何让该矢量对象显示在 JTable 上?

4

4 回答 4

2

AJTable使用 aTableModel来保存其数据。您的数据散列/向量需要进行调整以供使用;您可以编写一个TableModel实现,使用哈希/向量作为支持数据,或者,如果您不会动态更新哈希/向量并需要它自动显示,您可以简单地将所有内容复制到 的实例中DefaultTableModel,然后使用它。

如果您使用适配器并动态更新哈希/向量,请记住所有更新必须在事件调度线程中完成。:-)

于 2008-09-19T23:54:40.957 回答
1

只是为了说明,以下是如何使用s 和sDefaultTableModel显示数据的示例。HashMapVector

以下是将数据从 a 转储HashMapDefaultTableModel用作a 的TableModela的示例JTable

import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

public class JTableExample extends JFrame
{
    private void makeGUI()
    {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // HashMap with some data.
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("key1", "value1");
        map.put("key2", "value2");

        // Create a DefaultTableModel, which will be used as the
        // model for the JTable.
        DefaultTableModel model = new DefaultTableModel();

        // Populate the model with data from HashMap.
        model.setColumnIdentifiers(new String[] {"key", "value"});

        for (String key : map.keySet())
            model.addRow(new Object[] {key, map.get(key)});

        // Make a JTable, using the DefaultTableModel we just made
        // as its model.
        JTable table = new JTable(model);

        this.getContentPane().add(table);
        this.setSize(200,200);
        this.setLocation(200,200);
        this.validate();
        this.setVisible(true);
    }

    public static void main(String[] args)
    {
        new JTableExample().makeGUI();
    }
}

对于使用 aVector将一列数据包含到 a 中JTable

import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

public class JTableExample extends JFrame
{
    private void makeGUI()
    {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Vector with data.
        Vector<String> v = new Vector<String>();
        v.add("first");
        v.add("second");

        // Create a DefaultTableModel, which will be used as the
        // model for the JTable.
        DefaultTableModel model = new DefaultTableModel();

        // Add a column of data from Vector into the model.
        model.addColumn("data", v);

        // Make a JTable, using the DefaultTableModel we just made
        // as its model.
        JTable table = new JTable(model);

        this.getContentPane().add(table);
        this.setSize(200,200);
        this.setLocation(200,200);
        this.validate();
        this.setVisible(true);
    }

    public static void main(String[] args)
    {
        new JTableExample().makeGUI();
    }
}

我不得不承认在使用上面的例子时没有出现列名(我通常使用DefaultTableModel'ssetDataVector方法),所以如果有人对如何使列名出现有任何建议,请做:)

于 2008-09-20T01:08:58.173 回答
0

为了补充我之前的答案,为了它的价值,我实际上编写了一个表模型,它使用(基本上)ArrayList<Row>作为支持数据,其中Row是 a HashMap<String, Object>,将列名映射到值。

整件事大约有 1500 行代码,尽管我的代码对你的目的来说可能有点过头了,而且你可能不必编写几乎那么多的代码。一切顺利!

于 2008-09-20T00:05:43.647 回答
0

只是对 coobird 帖子的补充;为了让标题出现,我这样做了:

import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

public class JTableExample extends JFrame
{
    private void makeGUI()
    {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // HashMap with some data.
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("key1", "value1");
        map.put("key2", "value2");

        // Create a DefaultTableModel, which will be used as the
        // model for the JTable.
        DefaultTableModel model = new DefaultTableModel();

        // Populate the model with data from HashMap.
        model.setColumnIdentifiers(new String[] {"key", "value"});

        for (String key : map.keySet())
                model.addRow(new Object[] {key, map.get(key)});

        // Make a JTable, using the DefaultTableModel we just made
        // as its model.
        JTable table = new JTable(model);

        this.getContentPane().add(new JScrollPane(table));
        this.setSize(200,200);
        this.setLocation(200,200);
        this.validate();
        this.setVisible(true);
    }

    public static void main(String[] args)
    {
        new JTableExample().makeGUI();
    }
}

顺便说一句,你的帖子对我很有帮助,你不知道我有多感激!

于 2008-10-22T11:17:06.597 回答