【问题标题】:Dynamic Creation of JTable (Boolean Truth Tables)JTable(布尔真值表)的动态创建
【发布时间】:2013-10-30 12:38:04
【问题描述】:

我有一个代码可以为给定的布尔表达式生成一个真值表。例如,考虑 (A+B)+(C+D) 的用户输入表达式。我有一个字符串数组headers[],它将存储真值表的所有必要标题。

在这种情况下,它将包含:"A", "B", "C", "D", "A+B", "C+D", "(A+B)+(C+D)"

那么生成的真值表(一个二维整数数组TruthTable[][])将包含以下数据:

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

所以headers[] 数组的第一个元素将对应TruthTable[][] 的第一列。如何考虑这些数据动态生成真值表(使用 JTable)?

【问题讨论】:

    标签: java swing jtable boolean truthtable


    【解决方案1】:

    使用 DefaultTableModel 创建 JTable 并将新行插入到表模型中。 教程JTable and 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);
    }
    }
    

    【讨论】:

      【解决方案2】:

      @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);
      

      【讨论】:

        猜你喜欢
        • 2015-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多