1

答える前に: はい、Sun の jtable チュートリアルを読みました。いいえ、役に立ちませんでした。はい、私はドルです。そのドキュメントを参照して回答しないでください。私が特に興味を持っているのは、Netbeans IDE を介して Jtable に行と列を動的に追加する方法です。データのハッシュマップを含むオブジェクトが既にあります。そのオブジェクトをどこに、またはどのオブジェクトに渡す必要があるのか​​ わかりません。御時間ありがとうございます!

一連の (長さ l) オブジェクト (それぞれが行に対応する) を含むベクトルがあります。ベクター オブジェクトを JTable に表示するにはどうすればよいですか?

4

4 に答える 4

2

AJTableは、TableModelそのデータを保持するために a を使用します。データのハッシュ/ベクトルを使用するには適応させる必要があります。ハッシュ/ベクトルをバッキング データとして使用して実装を記述できますTableModel。または、ハッシュ/ベクトルを動的に更新せず、自動的に表示する必要がない場合は、単にすべてを のインスタンスにコピーしてDefaultTableModel、それを使用できます。

アダプターを使用し、ハッシュ/ベクターを動的に更新する場合は、すべての更新をイベント ディスパッチ スレッドで行う必要があることに注意してください。:-)

于 2008-09-19T23:54:40.957 に答える
1

説明のために、 を使用しておよびDefaultTableModelからのデータを表示する方法の例を次に示します。HashMapVector

以下は、 から のとして使用されるHashMapにデータをダンプする例です。DefaultTableModelTableModelJTable

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();
    }
}

を使用してVectorデータの列を に含める場合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

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();
    }
}

ところで、あなたの投稿は coobird にとってとても役に立ちました。

于 2008-10-22T11:17:06.597 に答える
0

以前の回答に追加するために、価値があるので、実際に (本質的に)ArrayList<Row>をバッキング データとして使用するテーブル モデルを作成しました。 は でRowありHashMap<String, Object>、列名を値にマッピングします。

全体で約 1500 行のコードですが、私のコードはあなたの目的には過剰かもしれませんが、おそらくそれほど多くのコードを書く必要はありません。ではごきげんよう!

于 2008-09-20T00:05:43.647 に答える