Динамическое создание JTable (логические таблицы истинности)

У меня есть код, который генерирует таблицу истинности для данного логического выражения. Например, рассмотрим введенное пользователем выражение (A+B)+(C+D). У меня есть массив строк headers[], в котором будут храниться все необходимые заголовки для таблицы истинности.

В этом случае он будет содержать: "A", "B", "C", "D", "A+B", "C+D", "(A+B)+(C+D)"

Тогда сгенерированная таблица истинности (массив 2d int TruthTable[][]) будет содержать следующие данные:

0000000
1000101
0100101
1100101
0010011
1010111
0110111
1110111
0001011
1001111
0101111
1101111
0011011
1011111
0111111
1111111

Таким образом, первый элемент массива headers[] будет соответствовать первому столбцу массива TruthTable[][]. Как мне динамически генерировать таблицу истинности (используя JTable) с учетом этих данных?


person Janno Ramos    schedule 30.10.2013    source источник


Ответы (2)


Создайте JTable с DefaultTableModel и вставьте новые строки в модель таблицы. Учебное пособие по JTable и Model

Простой пример для таблицы:

public class Example extends JFrame{

private JTable table;
private DefaultTableModel modelTable;

public Example(){
    init();
}

private void init() {
    table = new JTable();
    table.setGridColor(Color.BLACK);
    table.setAutoResizeMode(2);
    modelTable = new DefaultTableModel(new Object[][]{}, new String[] {"A", "B", "C"});
    table.setModel(modelTable);
    Object[][] data = new Object[][]{{"1","2","3"},{"4","5","6"}};
    for(int i =0;i<data.length;i++){
        modelTable.addRow(data[i]);
    }
}

public static void main(String... s){
    Example p = new Example();
    p.add(new JScrollPane(p.table));
    p.pack();
    p.setVisible(true);
}
}
person alex2410    schedule 30.10.2013

@ alex2410 имеет смысл, когда говорит использовать DefaultTableModel.

Если у вас возникли проблемы с FormLayout, загрузите форму JGoodies или просто измените макет =)

Возможно, это то, что Вы ищете:

ПраваяТабличнаяПанель

public class ThruthTablePanel extends JPanel {
private JScrollPane scrollPane;
private JTable table;

/**
 * Create the panel.
 */
public ThruthTablePanel() {
    initComponents();
}

private void initComponents() {
    String columnsLayout = "3dlu, default:grow, 3dlu";
    String rowsLayout = "3dlu, default:grow, 3dlu";
    setLayout(new FormLayout(columnsLayout, rowsLayout));

    scrollPane = new JScrollPane();
    add(scrollPane, "2, 2, fill, fill");
    Object[] headers = new Object[] { "A", "B", "C", 
                                      "D", "A+B", "C+D",
                                      "(A+B)+(C+D)" };

    String[] results = new String[] { "0000000", "1000101", "0100101",
                                      "1100101", "0010011", "1010111", "0110111", "1110111",
                                      "0001011", "1001111", "0101111", "1101111", "0011011",
                                      "1011111", "0111111", "1111111" };


    DefaultTableModel model = new DefaultTableModel(new Object[][] {}, headers);
    model.setRowCount(results.length);

    table = new JTable(model);

    for (int j = 0; j < results.length; j++) {
        for (int i = 0; i < results[j].length(); i++) {
            model.setValueAt(results[j].charAt(i), j, i);
        }
    }
    table.setFillsViewportHeight(true);
    scrollPane.setViewportView(table);
}

public static void main(String[] args) {
    JFrame frm = new JFrame();
    frm.setContentPane(new ThruthTablePanel());
    frm.setSize(new Dimension(400, 400));
    // frm.pack();
    frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frm.setLocationRelativeTo(null);
    frm.setVisible(true);
}

Но если у вас заполнена таблица ThruthTable[][], вы можете просто передать ее в качестве параметра модели.

Другое решение

    DefaultTableModel model = new DefaultTableModel(/* Here you put your ThruthTable Vector */, headers);

    table = new JTable(model);
person Gabriel Câmara    schedule 30.10.2013