0

我有一个代码可以为给定的布尔表达式生成一个真值表。例如,考虑(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)?

4

2 回答 2

1

使用DefaultTableModel创建JTable并将新行插入表模型。它的教程JTable 和模型

表的简单示例:

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);
}
}
于 2013-10-30T12:45:40.513 回答
0

@alex2410 说要使用 DefaultTableModel 是有道理的。

如果您对 FormLayout 有疑问,请下载 JGoodies 表单或简单更改布局 =)

也许这就是您正在寻找的:

ThruthTablePanel

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);
于 2013-10-30T13:16:10.253 回答