code: public static AbstractTableModel getBoundProperties(final CSProperties p, String boundName) throws ParseException {
  
  
          final int rows = DataIO.getInt(p, boundName);
          final List<String> arr = keysByMeta(p, "bound", boundName);
  
          return new AbstractTableModel() {
  
              @Override
              public int getRowCount() {
                  return rows;
              }
  
              @Override
              public int getColumnCount() {
                  return arr.size();
              }
  
              @Override
              public Object getValueAt(int rowIndex, int columnIndex) {
                  String colname = arr.get(columnIndex);
                  String[] d = Conversions.convert(p.get(colname), String[].class);
                  return d[rowIndex].trim();
              }
  
              @Override
              public boolean isCellEditable(int rowIndex, int columnIndex) {
                  return true;
              }
  
              @Override
              public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
                  String colname = arr.get(columnIndex);
                  String[] d = Conversions.convert(p.get(colname), String[].class);
                  d[rowIndex] = aValue.toString().trim();
                  String s = toArrayString(d);
                  p.put(colname, s);
              }
  
              @Override
              public String getColumnName(int column) {
                  return arr.get(column);
              }
  
              @Override
              public Class<?> getColumnClass(int columnIndex) {
                  return String.class;
              }
          };
      }
docs: 1D arrays