отобразить таблицу ArrayList - PullRequest
2 голосов
/ 26 марта 2011

У меня есть main.java, у которого есть кнопка, когда вы нажимаете ее, она вызывает метод и повторно запускает ArrayList of Nodes; Я хочу отобразить ArrayList в таблице (5 полей, как описано в классе Node) Как это сделать, проблема в том, чтобы отобразить некоторые поля, как они имеют тип списка?

Node.java

public class Node {
    private String name;
    private double value;
    private List<Node> first;
    private List<Node> second;
    private List<Double> values;

        //some methods... 
}

main.java

import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
public class Main {
    public static void main(String[] args) {
             JFrame frame = new JFrame("Red Bayesiana Visita a Asia ");
             JPanel panel = new JPanel();
             boton = new Button( "Get");
             panel.add(boton);
             frame.add(panel);

             ArrayList<Node>  arrayList;

             boton.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                         arrayList = method("file.txt");
                         //insert into table arrayList of 5 fields? 
                    }
            });

         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.setSize(400, 400);
         frame.setVisible(true);
    }
}

1 Ответ

4 голосов
/ 26 марта 2011

Как обсуждено в Создание табличной модели , пусть Nodes расширяет AbstractTableModel и реализует необходимые методы.Используйте полученную модель для создания вашего JTable.

Addendum: Вот схема модели.Поля name и value могут использовать по умолчанию рендеринг , но вам придется решить, как визуализировать List s, найденных в каждом Node.

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/** @see http://stackoverflow.com/questions/5438516 */
public class Nodes extends AbstractTableModel {

    private List<Node> nodes = new ArrayList<Node>();

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

    @Override
    public int getColumnCount() {
        return 5; // A Node has five members
    }

    @Override
    public Object getValueAt(int row, int col) {
        Node node = nodes.get(row);
        switch (col) {
            case 0:
                return node.name;
            case 1:
                return node.value;
            case 2:
                return node.first;
            case 3:
                return node.second;
            case 4:
                return node.values;
            default:
                return null;
        }
    }

    @Override
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

    private class Node {

        private String name;
        private double value;
        private List<Node> first;
        private List<Node> second;
        private List<Double> values;
    }
}
...